【发布时间】:2014-09-16 11:02:34
【问题描述】:
我有一个数据文件,在打印时会输出一系列字符:
@ao��B��@�a��z�I{�@�M�C�cID ...等
我还有一个从该数据文件中提取的二进制值,但我不确定文件中的哪个位置。因此,鉴于我可以使用
读取数据 with open(self.filename, mode='rb') as data_file:
self._file_contents = data_file.read()
我一直在尝试在表示文件的大字符串中搜索二进制值的索引起始位置。
[m.start() for m in re.finditer(binary, data_file._file_contents]
我已尝试将binary 作为二进制字符串(例如10011010)并使用str(int(binary,2)) 将其转换为可在文件中搜索的整数字符串值。
这些都没有奏效,所以我在质疑自己的逻辑和理由。如果您知道如何找到二进制值的索引,假设您 100% 确定它在文件中,请告诉我您将如何做到这一点。谢谢
【问题讨论】:
-
我认为您在这里混淆了“二进制”的两个含义:数字的 base-2 表示(例如
10011010是二进制的 154)与“非文本”(例如 @987654326 Python 3 中的 @ 或 Python 2 中的'@ao��'是字节或字符串中的二进制数据。 -
能否请您扩展“字节或字符串中的二进制数据”?
-
bytes/str对象的内容有时会被解释为编码(或只是 ASCII)文本,例如b"Foo: bar\n",但它们有时也不是 旨在解释为文本,如"@ao��",或 JFIF 图像的内容。后一种情况称为“二进制数据”。它不是二进制的,因为它是 base-2,它是二进制的,因为它的含义是非文本的。
标签: python string binary full-text-search ascii