提问人:Nathan Seiler 提问时间:8/21/2023 更新时间:8/21/2023 访问量:46
访问计算机文件中的 XML 数据 [复制]
acessing xml data in machine files [duplicate]
问:
我想阅读一些机器数据的分析日志。我要读取的数据以 xml 格式编写,但位于文件末尾。 我遇到了一个问题,即文件以不可读的机器数据开头,并且我找不到读取文件和访问xml数据的方法。 由于机器数据是用 1000 多行代码编写的,因此我最喜欢的是忽略机器数据,只读入 xml 数据。 此外,这些文件不是在 .xml 上结束,而是在 .wve 上结束
帮助将不胜感激!
答:
0赞
Paolo Sini
8/21/2023
#1
使用几个假设:
- 如果我们确定标签始终存在
<Version>
- 如果我们确定标签始终是第一个标签
<Version>
然后我们可以寻找它并丢弃之前的所有内容,如下所示:
# Use your file name instead of `data.wve` here
with open("data.wve") as data_file:
file_content = data_file.read()
# Split the content of the file in 2 parts, starting at the version tag
xml_data = file_content.split("<Version", 1)[1]
# Because the `split` method removes the separator, place it back at the begining of the string
xml_data = "<Version" + xml_data
print(xml_data)
然后,您可以在此处查看 python 标准库 XML 处理模块,以解析剩余的 XML 数据。
评论
1赞
Michael Kay
8/21/2023
除了后面的东西不是 XML - 它在结束标记中具有属性。<version>
1赞
Nathan Seiler
8/23/2023
感谢您帮助我找到我想处理的文件部分。数据不是我没有意识到的 xml,因为我是这个领域的新手。但是,我猜是出了点什么。
0赞
artygo
8/21/2023
#2
正如 mzjn 所强调的,本文档不是 XML,这意味着您将不得不手动解析它......
如果仍要提取“XML like”部分,可以按如下步骤操作:
with open('awesome.wve', 'rb') as f:
content = f.read()
# the last '>' will be the end of the pseudo_xml
end_of_pseudo_xml = content.rfind(b'>') + 1
# the last tag will be something like </someTag>
ending_tag = content[content.rfind(b'<') : end_of_pseudo_xml]
# the first tag will be something like <someTag> or <someTag some_value="V">
first_tag = ending_tag.replace(b'</', b'<').replace(b'>', b'')
# the pseudo_xml will be something like <someTag...> ... </someTag>
pseudo_xml = content[content.find(first_tag) : end_of_pseudo_xml]
# from bytes to string
pseudo_xml = pseudo_xml.decode()
请注意,使用 to 从末尾搜索字符串的内容。rfind
评论
1赞
mzjn
8/21/2023
可读内容不是 XML(不允许使用结束标记上的属性)
评论
<version>