相关文章推荐
更新时间:2019年06月25日 16:51:48   作者:淡淡博客
这篇文章主要介绍了Python二进制文件读取并转换为浮点数详解,用python读取二进制文件,这里主要用到struct包,而这个包里面的方法主要是unpack、pack、calcsize。,需要的朋友可以参考下

本文所用环境:

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文件

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
  • 深入讨论Python函数的参数的默认值所引发的问题的原因

    深入讨论Python函数的参数的默认值所引发的问题的原因

    这篇文章主要介绍了深入讨论Python函数的参数的默认值所引发的问题的原因,利用了Python解释器在内存地址分配中的过程解释了参数默认值带来陷阱的原因,需要的朋友可以参考下
    2015-03-03
  • Python单链表简单实现代码

    Python单链表简单实现代码

    这篇文章主要介绍了Python单链表简单实现代码,结合实例形式分析了Python单链表的具体定义与功能实现技巧,需要的朋友可以参考下
    2016-04-04
  • 关于PyTorch源码解读之torchvision.models

    关于PyTorch源码解读之torchvision.models

    今天小编就为大家分享一篇关于PyTorch源码解读之torchvision.models,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • 使用python实现语音文件的特征提取方法

    使用python实现语音文件的特征提取方法

    今天小编就为大家分享一篇使用python实现语音文件的特征提取方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • pycharm 使用心得(三)Hello world!

    pycharm 使用心得(三)Hello world!

    作为PyCharm编辑器的起步,我们理所当然的先写一个Hello word,并运行它。(此文献给对IDE不熟悉的初学者)
    2014-06-06
  • python实现flappy bird游戏

    python实现flappy bird游戏

    这篇文章主要为大家详细介绍了python实现flappy bird游戏,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-12-12
  • 利用Pygame制作躲避僵尸游戏

    利用Pygame制作躲避僵尸游戏

    本文参考了神庙逃亡,利用Pygame实现一个人躲避僵尸的小游戏,主要的是精灵、精灵组之间相撞、相交的处理,感兴趣的可以了解一下
    2022-05-05
  • python pandas时序处理相关功能详解

    python pandas时序处理相关功能详解

    这篇文章主要介绍了python pandas时序处理相关功能详解的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • Python分支语句常见的使用方法

    Python分支语句常见的使用方法

    这篇文章主要介绍了Python分支语句常见的使用方法,Python分支语句,也称为选择语句,体现了程序的选择结构,即对应不同的场景,选择不同的处理方式,具体常见的用法需要的朋友可参考下面文章内容
    2022-06-06
  • 利用Pandas读取某列某行数据之loc和iloc用法总结

    利用Pandas读取某列某行数据之loc和iloc用法总结

    loc是location的意思,和iloc中i的意思是指integer,所以它只接受整数作为参数,下面这篇文章主要给大家介绍了关于利用Pandas读取某列某行数据之loc和iloc用法的相关资料,需要的朋友可以参考下
    2022-03-03
 
推荐文章