使用 python 读取二进制文件
Reading binary files using python
我有一些二进制文件,其中 header 我有兴趣阅读。这些二进制 Fortran 文件具有以下结构:
TYPE File_syn
Sequence
Character (Len=64) :: Site_ID ! 64 bytes 64
Character (Len=4) :: year ! 4 bytes 68
Character (Len=4) :: mon ! 4 bytes 72
Real :: lat ! 4 bytes 76
Real :: lon ! 4 bytes 80
Real :: elev ! 4 bytes 84
Real :: extras ! 4 bytes 88
Character (Len=32), Dimension(50) :: label ! 1600 bytes 1688
Character (Len=2408) :: padding ! 2408 bytes 4096
END TYPE File_syn
我有兴趣使用 Python 读取这些文件并整体获取变量 extra 和标签,最后一个将这些字节转换为数组字符。
我试过这样的事情:
with open(file_path, 'rb') as f:
Site_ID = f.read(64)
year = f.read(4)
month = f.read(4)
lat = f.read(4)
lon = f.read(4)
elev = f.read(4)
extras = f.read(4)
label = f.read(1600)
header_file = f.read(2408)
print(extras)
print(label)
对于 extras
我有这样的东西:
b'A0\x00\x00'
如何转换为字符?
提前致谢
您可以使用结构模块将二进制字符串转换为浮点数。
例如:
import struct
x = struct.unpack('f', b'A0\x00\x00')[0]
输出 1.7310239929804465e-41
这可能不是最优雅的解决方案,因为您必须将 'extras' 转换为字符串。
x = struct.unpack('f', str(extras))[0]
我有一些二进制文件,其中 header 我有兴趣阅读。这些二进制 Fortran 文件具有以下结构:
TYPE File_syn
Sequence
Character (Len=64) :: Site_ID ! 64 bytes 64
Character (Len=4) :: year ! 4 bytes 68
Character (Len=4) :: mon ! 4 bytes 72
Real :: lat ! 4 bytes 76
Real :: lon ! 4 bytes 80
Real :: elev ! 4 bytes 84
Real :: extras ! 4 bytes 88
Character (Len=32), Dimension(50) :: label ! 1600 bytes 1688
Character (Len=2408) :: padding ! 2408 bytes 4096
END TYPE File_syn
我有兴趣使用 Python 读取这些文件并整体获取变量 extra 和标签,最后一个将这些字节转换为数组字符。
我试过这样的事情:
with open(file_path, 'rb') as f:
Site_ID = f.read(64)
year = f.read(4)
month = f.read(4)
lat = f.read(4)
lon = f.read(4)
elev = f.read(4)
extras = f.read(4)
label = f.read(1600)
header_file = f.read(2408)
print(extras)
print(label)
对于 extras
我有这样的东西:
b'A0\x00\x00'
如何转换为字符?
提前致谢
您可以使用结构模块将二进制字符串转换为浮点数。
例如:
import struct
x = struct.unpack('f', b'A0\x00\x00')[0]
输出 1.7310239929804465e-41
这可能不是最优雅的解决方案,因为您必须将 'extras' 转换为字符串。
x = struct.unpack('f', str(extras))[0]