0
형식이 리틀 엔디안 인 변수 하나를 포함하는 바이너리 파일 (float32)을 읽으려고합니다.형식 및 치수를 알고있는 동안 파이썬을 사용하여 바이너리 읽기
이 바이너리는 차원 (8, 480, 1440)이있는 3D 변수를 제공해야합니다. 다른 파일에 주어진대로 헤더가 없습니다.
바이너리를 읽는 데 많은 어려움을 겪고 여기에서 보았던 여러 가지 솔루션을 시도해 본 결과 마침내 스크립트를 실행할 수있었습니다. 그러나 결과는 예상대로 (포인트 분배가 잘못되었습니다.) 어느 부분에서 잘못되었다고 생각됩니다. 여기
은 실행되지만 예상 된 결과 나에게 포기하지 않았다 코드의 최소한의 예입니다filename=["CMORPH_3HLY_19980102"]
with open(filename[0], mode='rb') as file:
fileContent = file.read()
data=struct.unpack("f" * (len(fileContent) // 4), fileContent)
nvar = 1
ntim = 8
nlat = 480
mlon = 1440
data_ok=np.array(data)
cmorph=data_ok.reshape((mlon,nlat,nvar*ntim)).transpose()
나는 매우 익숙하지 나처럼 문제의 struct.unpack 안에 무엇에서 유래하지만, 생각 이진 형식과 이진 파일을 일반적으로 사용하면이 문제를 해결할 방법을 알 수 없습니다. 도움이나 의견을 보내 주시면 감사하겠습니다.
데이터 유형은 무엇입니까? 32 비트 ints? –
32 바이트의 부동 소수점이라고 생각합니다. 이것은 동일한 데이터를 읽는 matlab 스크립트에서 사용되는 것입니다. 확실한 방법이 있습니까? 문서에 따르면 각 레코드에는 실제 * 4 데이터 배열이 포함되어 있습니다. – dcoppin
'np.fromfile (file [, dtype, count, sep]) '을 사용하지 않는 이유 \t 텍스트 또는 바이너리 파일의 데이터로부터 배열을 생성하십시오. – stovfl