首页 > 解决方案 > 使用python读取二进制文件

问题描述

我有一些二进制文件,其中包含我有兴趣阅读的标题。这些二进制 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 和 label ,最后一个将这些字节转换为数组字符。

我试过这样的事情:

 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'

我怎么能转换成字符?

提前致谢

标签: pythonbinary

解决方案


您可以使用 struct 模块将二进制字符串转换为浮点数。

例如 :

import struct
x = struct.unpack('f', b'A0\x00\x00')[0]

给出 1.7310239929804465e-41 作为输出

这可能不是最优雅的解决方案,因为您必须将“附加”转换为字符串。

x = struct.unpack('f', str(extras))[0]

推荐阅读