日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

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

發布時間:2024/1/8 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python如何读取二进制文件为图片_Python二进制文件读取并转换 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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二进制文件读取并转换的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。