鱼C论坛

 找回密码
 立即注册
查看: 849|回复: 8

[已解决]如何用python读取二进制文件中的数字呢?

[复制链接]
发表于 2020-2-26 16:05:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 负离负离子 于 2020-2-26 16:12 编辑

最近在为了机试研究题目,可是第一步就碰到问题了
现在是有20000个数存储于二进制文件中,要读取出来
我知道要用rb的方式来读

  1. with open('data.dat', 'rb') as file_handle:
  2.         nums = file_handle.read()
复制代码


可是这样做完之后nums是一个bytes类型
len(nums) = 80000似乎是说一个数字有4个字节(存疑)

那么我该怎么把他们一个一个读取出来并丢到列表里面呢
或者说该怎么处理这个bytes类型


链接:https://pan.baidu.com/s/1HKIZ-7EMI1GQEp6adoxQOg
提取码:jtl7
因为没有找到怎么添加文件,我就用云盘吧,麻烦各位了
最佳答案
2020-2-26 17:32:24
  1. import struct  
  2. with open('data.dat', 'rb') as file_handle:
  3.         all_num = []
  4.         while True:
  5.             get_num = file_handle.read(4)                 #每次读取四字节的数据
  6.             if (get_num == b''):                #判断是否为文件结尾,在文件结尾时,会读取到(b'')
  7.                 break
  8.             num = struct.unpack('I', get_num)   #将结果按照格式进行解析, 'I'表示unsigned int
  9.             all_num.append(num[0])              #将结果添加到all_num中,这里num是一个tuple,即(x,)类型的数据
  10. print(all_num)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-26 16:08:16 From FishC Mobile | 显示全部楼层
方便把文件传上来?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-26 16:09:03 | 显示全部楼层
文件可以传上来吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-26 16:10:17 | 显示全部楼层
链接:https://pan.baidu.com/s/1HKIZ-7EMI1GQEp6adoxQOg
提取码:jtl7
因为没有找到添加文件,我就把文件丢云盘了
不好意思
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-26 16:11:05 | 显示全部楼层
wp231957 发表于 2020-2-26 16:08
方便把文件传上来?

链接:https://pan.baidu.com/s/1HKIZ-7EMI1GQEp6adoxQOg
提取码:jtl7
因为没有找到怎么添加文件,我就用云盘吧,麻烦各位了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-26 16:23:33 | 显示全部楼层
qiuyouzhi 发表于 2020-2-26 16:09
文件可以传上来吗
  1. 链接:https://pan.baidu.com/s/1HKIZ-7EMI1GQEp6adoxQOg
  2. 提取码:jtl7
复制代码

因为没有找到怎么添加文件,我就用云盘吧,麻烦各位了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-26 17:32:24 | 显示全部楼层    本楼为最佳答案   
  1. import struct  
  2. with open('data.dat', 'rb') as file_handle:
  3.         all_num = []
  4.         while True:
  5.             get_num = file_handle.read(4)                 #每次读取四字节的数据
  6.             if (get_num == b''):                #判断是否为文件结尾,在文件结尾时,会读取到(b'')
  7.                 break
  8.             num = struct.unpack('I', get_num)   #将结果按照格式进行解析, 'I'表示unsigned int
  9.             all_num.append(num[0])              #将结果添加到all_num中,这里num是一个tuple,即(x,)类型的数据
  10. print(all_num)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-26 20:42:21 | 显示全部楼层

大致了解了,非常感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-26 21:48:07 | 显示全部楼层
负离负离子 发表于 2020-2-26 20:42
大致了解了,非常感谢

不客气!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-30 01:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表