繁体   English   中英

无法在 Python 中读取二进制文件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM