我想逐字节读取文件并检查每个字节的最后一位是否已设置:
#!/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 http://docs.python.org/py3k/library/functions.html#bytearray类型(Python 2.6 及更高版本),它更适合处理字节数据。你的try
块就是:
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 http://docs.python.org/library/functions.html#ord将其转换为整数。
如果您的文件太大而无法轻松保存在内存中(尽管我猜不是),那么mmap http://docs.python.org/library/mmap.html可以用来创建bytearray
从缓冲区:
import mmap
m = mmap.mmap(fh.fileno(), 0, access=mmap.ACCESS_READ)
ba = bytearray(m)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)