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
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.