python二进制文件打开出错_Python读二进制文件遇到的问题

0818b9ca8b590ca3270a3433284dd417.png

近日,需要用Python读取二进制文件(见上图),然后解析出想要的数据,转化成16进制,在显示出来

fp = open(path,'r+')

s= fp.read(ioneblock)

while '' != s :

t = s.encode('hex')

print 'first t is %t'%t

遇到到一个莫名的问题,遇到'0x1A'的字节就会读不出来,费了差不多一天时间,发现Python会将这个字符认为是文档结束符EOF。

解决这个问题的方法就是,二进制文件就用二进制方法打开。

将 fp = open(path,'r+') 改为

fp = open(path,'rb')

问题得到解决

以下是转载内容

利用Python读取二进制文档时,如一些程序的计算结果,一般要在在打开文件后,利用struct模块中的unpack方法获取真实数据。

import os

import struct

fp=open(filename,"r")

data = struct.unpack("f",fp.read(4))

这几行语句实现了从文件中读取4个字节数据并转化为float数。

一般这样执行时没有问题的,fp.read(4)返回的是4个字节对应的字符,unpack将这4个字符按照float格式进行翻译。

但是,在数据处理中发现,如果一个数据的第一个字节是"/x1A",那么Python就会将这个字符认为是文档结束符EOF,从而不再读取后面三个数据,譬如

在二进制文件中存在如下从低位向高位排列的数据

1A 2F 3D 10 2C 12 2E 76

那么第一次读4个字节时,会读不出任何数据。加入这次读取数据仍然能够完成,那么接下来读取的下4个字节数据就是2F 3D 10 2C了,从而会导致数据出现根本错误。

解决这个问题的方法就是,二进制文件就用二进制方法打开。

fp=open(filename,"r")

修改为

fp=open(filename,"rb")

上面的错误就不会发生了。

第一次读取4个字节时,是按照二进制位进行读取的,fp.read(4)只是返回32位数据,而不会将其翻译成对应的字符,从而避免了上面的错误。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值