Python 바 이 너 리 파일 을 읽 고 부동 소수점 으로 변환 합 니 다.

본문 에 사 용 된 환경:
Python 3.6.5 |Anaconda custom (64-bit)|
머리말
어떤 이유 로 python 으로 바 이 너 리 파일 을 읽 어야 합 니 다.여 기 는 주로 struct 가방 을 사용 합 니 다.이 가방 안의 방법 은 주로 unpack,pack,calcsize 입 니 다.상세 한 소 개 는파 이 썬 구조 공식 문서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_ 
상기 코드 는 각 조각의 크기 를 820000 k 로 지정 하고-a 2 는 두 자릿수 이름 을 나타 내 며'data '대표 접 두 사 는'data'입 니 다.
최종 적 으로 49 개의 파일(사전 순서 aa C 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  
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기