![](/img/trans.png)
[英]Unable to close a file in python when opens it in read only binary mode
[英]Unable to read binary file in Python
我正在尝试使用以下格式读取二进制文件
with open("binaryfile.bin" , 'rb') as f1:
for line in f1.readlines():
print(line)
它正在返回乱码数据,如
@ ç─+@@@d*d)
⌡Å2
q_ Ç
我已经验证文件中的数据是正确的,我可以在命令行上使用od命令读取它
od -w8 -Ad -x binaryfile.bin
输出:
0000000 0011 0022 0066 0066
0000008 0066 0066 0066 0066
*
0000032 1234 0000 0000 0000
0000040 0000 0000 0000 0000
*
0000080 0000 0000 0000 0056
0000088 0011
'od'命令的问题在于,当两个或多个连续行相似时,它会将它们替换为"*\\n" 。 如果我每行只读取两个字节,这个问题就会变得更加普遍,因为更多的数据很常见。
od -w2 -Ad -x binaryfile.bin
输出:
0000000 0011
0000002 0022
0000004 0066
*
0000032 1234
0000034 0000
*
0000086 0056
0000088 0011
我想阅读每一行。
Q1:谁能建议为什么常规的“rb”命令不起作用?
问题 2:是否可以选择使用'ob'命令读取完整文件而不删除公共行?
open("binaryfile.bin" , 'rb')
工作正常,它以字节为单位读取数据,然后将此信息打印到控制台,并尝试将这些字节块转换为 'utf-8' 格式并产生奇怪的字符,因为你'重新阅读不是文本文件。
您可以使用binascii.hexify
方法将字节字符串转换为您想要的十六进制表示:
import binascii
with open("binaryfile.bin" , 'rb') as f1:
for line in f1.readlines():
# NOTE: arguments 'sep' and 'bytes_per_sep' are only since Python v3.8
print(binascii.hexlify(line, sep=' ', bytes_per_sep=2))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.