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

2024-09-29 17:45:01 发布

您现在位置:Python中文网/ 问答频道 /正文

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

它是fortran二进制格式,带有“toto”一个单浮点数组

  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'代替float,它们的值是不同的,但仍然没有多大意义。你知道吗

我还尝试使用:

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

Tags: 数据二进制unitfloattabfiled0toto

热门问题