读取二进制数据文件

问题描述 投票:0回答:1

我有一个看起来像是 .XML 的文件(它甚至有一个

<?xml version="1.0" encoding="utf-8"?>
标头)。但在标题之前,当我在 Notepad++ 中打开文件时,有随机字母和一些 NULL 字符。

Header

查看文件,在.XML标准编写之后,有很多随机字符(我认为,根据我的文件的来源,它是来自传感器的数据)

After the .XML body

我正在尝试用 python 打开它来处理数据,但我找不到方法。通常,对于 .XML 文件,我会使用元素树打开它。我尝试使用 open 读取二进制数据,但缓冲区返回的数据流仅显示 Notepad++ 中显示的字符。

我不知道我的问题是否有解决方案,或者我是否需要一本字典来翻译这些随机字符。

我将不胜感激任何人能给我的任何帮助!

我尝试过使用Element Tree、python的open方法和struct unpack。

python xml binary binary-data
1个回答
0
投票

我建议尝试

xml.parsers.expat
,它应该在删除前导 NUL 字符后起作用,请考虑以下示例

import xml.parsers.expat

enveloped_xml = '\x00\x00\x00<?xml version="1.0"?><outer outattr="outval"><inner inattr="inval">data</inner></outer>\xDE\xAD\xBE\xEF'

def start_element(name, attrs):
    print('Start element:', name, attrs)
def end_element(name):
    print('End element:', name)
def char_data(data):
    print('Character data:', repr(data))

p = xml.parsers.expat.ParserCreate()

p.StartElementHandler = start_element
p.EndElementHandler = end_element
p.CharacterDataHandler = char_data

try:
    p.Parse(enveloped_xml.lstrip('\x00'), 1)
except xml.parsers.expat.ExpatError:
    pass

提供输出

Start element: outer {'outattr': 'outval'}
Start element: inner {'inattr': 'inval'}
Character data: 'data'
End element: inner
End element: outer

代码基于 文档中的示例,观察

enveloped_xml
是 str,因此如果您有字节,则需要先
.decode
它们。解析器在 XML 之后抛出垃圾错误,但这是在处理正确的 XML 之后。

© www.soinside.com 2019 - 2024. All rights reserved.