在Python中搜索/读取二进制数据
我正在读取一个二进制文件(在这种情况下为jpg),需要在该文件中找到一些值。对于感兴趣的人,二进制文件是jpg,我正尝试通过查找此处详细介绍的二进制结构来选择其尺寸。
我需要在二进制数据中找到FFC0,向前跳过一些字节,然后读取4个字节(这应该给我图像尺寸)。
在二进制数据中搜索值的好方法是什么?是否有“寻找”的等效物,或类似re的东西?
回答:
您实际上可以将文件加载到字符串中,然后0xffc0
使用str.find()
方法在该字符串中搜索字节序列。它适用于任何字节序列。
执行此操作的代码取决于几件事。如果您以二进制模式打开文件并且使用的是Python
3(这两种都是该方案的最佳实践),则需要搜索一个字节字符串(而不是字符串),这意味着您必须在字符串前面加上b
。
with open(filename, 'rb') as f: s = f.read()
s.find(b'\xff\xc0')
如果您在Python 3中以文本模式打开文件,则必须搜索一个字符串:
with open(filename, 'r') as f: s = f.read()
s.find('\xff\xc0')
尽管没有特别的理由这样做。与以前的方法相比,它没有任何优势,并且如果您使用的平台对二进制文件和文本文件的处理方式不同(例如Windows),则很可能会引起问题。
Python
2不会区分字节字符串和字符串,因此,如果您使用的是该版本,则是否包含b
in都没有关系b'\xff\xc0'
。而且,如果您的平台将二进制文件和文本文件(例如Mac或Linux)相同地对待,则使用'r'
还是将其'rb'
用作文件模式都没有关系。但是我仍然建议您使用上面第一个代码示例之类的东西,以保持向前兼容性-
万一您确实切换到Python 3,就不那么容易解决了。
以上是 在Python中搜索/读取二进制数据 的全部内容, 来源链接: utcz.com/qa/409009.html