Python二进制文件读取并转换

Python二进制文件读取并转换

标签(空格分隔): python

本文所用环境:

Python 3.6.5 |Anaconda custom (64-bit)|

引言

由于某些原因,需要用python读取二进制文件,这里主要用到struct包,而这个包里面的方法主要是unpack、pack、calcsize。详细介绍可以看:Python Struct 官方文档。这里主要讨论,python二进制转浮点数的操作。

python中一个float类型的数占4个字节。

二进制数据转float,可以用struct.unpack()来实现。

小文件读取

较小的文件,可以一次读取:

首先导入所需的包:

import numpy as np

import struct

例如:我需要读取一个名为filename,存放着形状为[100,1025]的浮点数的文件。可以采用以下办法

# 加载测试数据

f = open('filename','rb')

# 102500为文档中包含的数字个数,而一个浮点数占4个字节

data_raw = struct.unpack('f'*102500,f.read(4*102500))

f.close()

verify_data = np.asarray(verify_data_raw).reshape(-1,1025)

大文件处理方法

我需要处理的文件大小有38.1G,存放着[10000000,1025]大小的向量。

关于大文件的处理,我参考了这位博主的文章-强悍的 Python —— 读取大文件,前两种方法都会造成MemoryError。第三种不会,但是,这个方法不能很好的将二进制文件转换成浮点数。

所以我想到了另外一种办法:

通过Linux命令切割文件

通过split命令将38.1G的文件按照指定大小切割,

split -b 820000k -a 2 filename data_

上述代码的意思是,指定每块大小为820000k,-a 2代表2位数命名,‘data_’代表前缀是’data_’

最终生成49个文件(字典序 aa – bw),前48个文件每个204800行 最后一个文件 169600行

820000 = 4_1025_204800/1024

通过python循环读取文件

首先构建词汇表:

voc = ['a','b','c','d','e','f','g','h','i','j','k','l',

'm','n','o','p','q','r','s','t','u','v','w','x',

'y','z']

voc_short = ['a','b','c','d','e','f','g','h','i','j','k','l',

'm','n','o','p','q','r','s','t','u','v']

为了方便读取,将49个二进制文件转换成numpy专用二进制格式*.npy

for i in voc:

data_name = 'data_a'+str(i)

f = open(data_name,'rb')

data_raw = struct.unpack('f'*209920000,f.read(4*209920000))

f.close()

data = np.asarray(data_raw).reshape(-1,1025)

np.save(data_name+'.npy',data) # 保存data_a*.npy文件

for i in voc_short:

data_name = 'data_b'+str(i)

f = open(data_name,'rb')

data_raw = struct.unpack('f'*209920000,f.read(4*209920000))

f.close()

data = np.asarray(data_raw).reshape(-1,1025)

np.save(data_name+'.npy',data) # 保存data_b*.npy文件

data_name = 'data_bw'

f = open(data_name,'rb')

data_raw = struct.unpack('f'*173840000,f.read(4*173840000))

np.save(data_name+'.npy',data_raw) # 保存data_bw.npy文件

python如何读取二进制文件为图片_Python二进制文件读取并转换相关推荐

  1. python docx 合并文档 图片_Python+pymupdf处理PDF文档案例6则

    推荐图书:<Python程序设计(第3版)>,(ISBN:978-7-302-55083-9),清华大学出版社,2020年6月第1次印刷,7月第2次印刷 京东购买链接:https://it ...

  2. python docx 合并文档 图片_Python检查Word文件中包含特定关键字的所有页码

    推荐教材:<Python程序设计基础与应用>(ISBN:9787111606178),董付国,机械工业出版社图书详情:配套资源:用书教师可以联系董老师获取教学大纲.课件.源码.教案.考试系 ...

  3. python docx 合并文档 图片_Python和Word的交互批量生成报告

    前言: 本文是一位学弟的投稿,主要是用Python将格式不一致的信评简报Word文档快速生成标准格式的表格,涉及到两步,一是读取所有Word文件,二是处理里面的数据并输出到表格里,能大大提高工作的效率 ...

  4. python docx 合并文档 图片_python玩转pdf全攻略

    本篇说点轻松的,聊下Python对pdf的各种操作,包含pdf转word,pdf转图片等. pdf转换word文档 保留格式 pdf转换为word文档,被大众经常使用的是纯Python库pdfmine ...

  5. python的flask前端显示图片_python Flask中返回图片流给前端展示

    python Flask中返回图片流给前端展示 image DHogan 2017-05-16 14:50:48 image 20440 image 收藏 12 版权 场景需求:需要在Flask服务器 ...

  6. python的flask前端显示图片_python 实现Flask中返回图片流给前端展示

    场景需求:需要在Flask服务器的本地找一张图片返回给前端展示出来. 问题疑点:通常前端的标签只会接受url的形式来展示图片,没试过在返回服务器本地的一张图片给前端. 因此写个记录一下这个看起来有点奇 ...

  7. python中几种读取文件的方法_python 逐行读取文件的几种方法

    Python四种逐行读取文件内容的方法 下面四种Python逐行读取文件内容的方法, 分析了各种方法的优缺点及应用场景,以下代码在python3中测试通过, python2中运行部分代码已注释,稍加修 ...

  8. python爬取贴吧图片_Python爬取贴吧多页图片

    Python爬取贴吧图片都只能爬取第一页的,加了循环也不行,现在可以了. #coding:utf-8 import urllib import urllib2 import re import os ...

  9. python 生成pdf 文字和图片_Python系列—PDF文本与图片抽取

    PDF是人们日常使用最多的跨平台文档.其是一种用独立于应用程序.硬件.操作系统的方式呈现文档的文件格式.每个PDF文件包含固定布局的平面文档的完整描述,包括文本.字形.图形及其他需要显示的信息.具有良 ...

最新文章

  1. 是什么让你开始劝退的?(@韩冬)
  2. 从ext2文件系统上读出超级块
  3. windows配置cmder
  4. wincc7.5官网下载及安装配置(适配window10超详细教程)
  5. python毕业设计作品基于django框架 景区购票系统毕设成品(6)开题答辩PPT
  6. python创建文件的方法_python创建文本文件的简单方法
  7. Oracle获取日期大全(当月的第一天/后一天/上一天/最后一天/上个月这一天)
  8. 如何连接局域网_Minecraft我的世界局域网联机问题(windows平台)
  9. 全网M1、MAC傻瓜式免费安装xmind
  10. java ext_ext下载及使用
  11. PV UV 日活 月活
  12. Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8mb4_0900_ai_ci,IMPLICIT) for operat
  13. Win8.1 安装NLTK及nltk数据
  14. 苹果手机怎么关机重启
  15. “源”来是你-Vol.33 | 浙江大应科技 Aloudata 招聘开源社区运营
  16. 后端开发如何快速转前端开发
  17. C#NPOI 往excel里面追加一行或者一个Datatable
  18. 【渗透测试】Struts2系列漏洞
  19. 网页中的css代码是写在哪的,网页里面的空格的代码怎么写
  20. python图像去污_图像去雾----暗通道

热门文章

  1. ANSI标准数据类型
  2. storyboard(故事版)新手教程 图文详解 1.创建一个无约束的导航栏加选项卡(tabbar)故事版
  3. 计算机科学协会入会申请书,计算机协会会长申请书
  4. 滴滴D1上路之后,科技巨头正在“抢滩登陆“造车战场
  5. 08、SpringCloud 系列:Nacos - 安装、启动
  6. 没有对比就没有伤害:《明日之后》竟成最良心国产末日手游?
  7. ubuntu中vim编辑模式退格键无法删除,方向键乱入ABCD解决方法
  8. Razorpay 印度第三方支付机构 Razorpay 支付,放款,还款实际操作
  9. html word表格边框变成表格,word表格边框显示不全跨页面显示的解决方法
  10. app启动速度优化实践