如何用Python读取十进制格式的二进制格式的数据?

时间:2017-05-05 09:51:07

标签: python binary format

我需要帮助阅读项目的数据。我试图读取的数据是以二进制格式编写的,使用FORTRAN以下列方式:

采用" toto"采用fortran二进制格式。一个单浮点数组

  open(unit=11,file=outfich,form='unformatted')
  write(11)ngal,9 ! Number of galaxies for which ages are computed

  allocate(toto(ngal,9))
  toto(1:ngal,1)=float(galid_tab(1:ngal))
  toto(1:ngal,2)=sfrgal10_tab (1:ngal)
  toto(1:ngal,3)=sfrgal100_tab (1:ngal)
  toto(1:ngal,4)=sfrgal1000_tab(1:ngal)
  toto(1:ngal,5)=agegal_tab(1:ngal)
  toto(1:ngal,6)=mgal_tab(1:ngal)*1d11
  toto(1:ngal,7)=xgal_tab(1:ngal)*3.08d24/unit_l+0.5d0
  toto(1:ngal,8)=ygal_tab(1:ngal)*3.08d24/unit_l+0.5d0
  toto(1:ngal,9)=zgal_tab(1:ngal)*3.08d24/unit_l+0.5d0
  write(11)toto

我试图使用以下方式读取数据:

dt = np.dtype([('galid', float), ('sfrgal10', float), ('sfrgal100', float),('sfrgal1000', float), ('agegal', float), ('mgal', float), ('xgal', float), ('ygal', float), ('zgal', float)])
numpy.fromfile(filepath, dtype=dt, count=-1, sep='')

但我得到的价值确实没有任何意义。我应该得到的价值是:

galid ~ 1-120000
mgal ~ 0-2
xgal, ygal, zgal ~ -50 - +50

我也尝试使用np.float16'<f8'代替浮点数,价值观不同,但仍然没有多大意义。

我也尝试过使用:

with open(filepath, mode='rb') as file: # b is important -> binary
    fileContent = file.read()
    data = struct.unpack("fffffffff", fileContent[:36])
print(data)

0 个答案:

没有答案