我有一个来自测量的自动生成的信息文件。它由二进制和人类可读部分组成。我想提取一些非二进制元数据。对于某些文件,我无法访问元数据,因为readlines()
不会产生整个文件。我猜这个文件包含一些EOF字符。我可以在记事本++中打开文件而不会出现问题。
这个问题的一个可能的解决方案是读取文件二进制文件并在之后将其解析为char,同时删除EOF字符。无论如何,我想知道是否有一种更优雅的方式呢?
编辑: 这个问题被正确地投了,我应该提供代码。我实际上使用
f = open(fname, 'r')
raw = f.readlines()
然后继续浏览列表。存在的EOF字符(取决于操作系统)似乎会导致我观察到的破坏。我将接受使用二进制'rb'
标志的答案。顺便说一句,这是一个令人印象深刻的响应时间! ( - :
答案 0 :(得分:5)
with open(afile,"rb") as f: print f.readlines()
这样做有什么问题?
如果您不以二进制模式打开文件,则会错误地解释和丢弃某些非ASCII字符...如果将其与二进制数据混合,可能会无意中删除某些ASCII
答案 1 :(得分:0)
您可以使用文件对象的read()
功能。它读取整个文件。
with open('input.bin', 'r') as f:
content = f.read()
然后你可以解析内容。 如果你知道你需要的部分在哪里开始,你可以寻求它(例如,如果文件有一个固定长度的二进制开始):
with open('input.bin', 'r') as f:
f.seek(CONTENT_START)
content = f.read()
在Windows上,您应该将读取模式更改为“rb”,以指示您要以二进制模式读取文件;只有在文本部分中的行结尾可能包含'\ r \ n',具体取决于您首先创建文件的方式。