本文所用环境:
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 Python
例如:我需要读取一个名为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]大小的向量。
关于大文件的处理,我参考了这文章,但是,这个方法不能很好的将二进制文件转换成浮点数。
所以我想到了另外一种办法:
通过Linux命令切割文件
通过split命令将38.1G的文件按照指定大小切割,
split -b 820000k -a 2 filename data_
上述代码的意思是,指定每块大小为820000k,-a 2代表2位数命名,‘data_'代表前缀是'data_'
最终生成49个文件(字典序 aa – bw),前48个文件每个204800行 最后一个文件 169600行
通过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文件
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]