我希望能够打开一个二进制文件,并创建一个包含所有字符的列表(一种数组),例如:"\x21\x23\x22\x21\x22\x31" 转换为 ["\x21","\x23","\x22","\x21","\x22","\x31"]。请问最好的解决方案是什么?
谢谢!
谢谢!
您需要了解"\x21"和"!"是表示同一事物的两种方式
因此"\x21\x23\x22\x21\x22\x31"
与'!#"!"1'
相同。
>>> "\x21\x23\x22\x21\x22\x31" == '!#"!"1'
True
>>> infile = open('infile.txt', 'rb')
>>> list(infile.read())
['!', '#', '"', '!', '"', '1']
>>> ['!', '#', '"', '!', '"', '1'] == ["\x21","\x23","\x22","\x21","\x22","\x31"]
True
您可以像读取文本数据一样读取二进制数据到字符串中,只需确保以二进制模式打开文件(在调用open()
时使用b
标志):
with open('file.bin', 'rb') as f:
data = f.read()
data
现在包含文件中的字符作为字符串,例如"\x21\x23\x22\x21\x22\x31"
。
myfile.txt
文件中有'abcdef\n'...>>> fh = open('myfile.txt', 'rb')
>>> list(fh.read())
['a', 'b', 'c', 'd', 'e', 'f', '\n']
res = array.array('c')
with open('binaryfile', 'rb') as f:
while True:
try: res.fromfile(f, 1024 * 1024)
except EOFError: break
该程序每次最多读取一兆字节(即 1024 * 1024
),但会一直执行直到文件全部读取完毕 -- 当然您也可以根据需求调整该行为。