gpt4 book ai didi

python - 在 Python 中从二进制文件中读取和解释数据

转载 作者:IT老高 更新时间:2023-10-28 20:24:49 26 4
gpt4 key购买 nike

我想逐字节读取文件并检查每个字节的最后一位是否设置:

#!/usr/bin/python

def main():
fh = open('/tmp/test.txt', 'rb')
try:
byte = fh.read(1)
while byte != "":
if (int(byte,16) & 0x01) is 0x01:
print 1
else:
print 0
byte = fh.read(1)
finally:
fh.close

fh.close()

if __name__ == "__main__":
main()

我得到的错误是:

Traceback (most recent call last):
File "./mini_01.py", line 21, in <module>
main()
File "./mini_01.py", line 10, in main
if (int(byte,16) & 0x01) is 0x01:
ValueError: invalid literal for int() with base 16: '\xaf'

任何人的想法?我没有成功使用 struct 和 binascii 模块。

最佳答案

尝试使用 bytearray type(Python 2.6 及更高版本),它更适合处理字节数据。您的 try block 将只是:

ba = bytearray(fh.read())
for byte in ba:
print byte & 1

或创建结果列表:

low_bit_list = [byte & 1 for byte in bytearray(fh.read())]

这是有效的,因为当你索引一个 bytearray 时,你只会得到一个整数 (0-255),而如果你只是从文件中读取一个字节,你会得到一个字符串,所以需要使用 ord将其转换为整数。


如果您的文件太大而无法舒适地保存在内存中(尽管我猜不是),那么 mmap可用于从缓冲区创建 bytearray:

import mmap
m = mmap.mmap(fh.fileno(), 0, access=mmap.ACCESS_READ)
ba = bytearray(m)

关于python - 在 Python 中从二进制文件中读取和解释数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3943149/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com