python - 使用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'
我怎么能转换成字符?
提前致谢
解决方案
您可以使用 struct 模块将二进制字符串转换为浮点数。
例如 :
import struct
x = struct.unpack('f', b'A0\x00\x00')[0]
给出 1.7310239929804465e-41 作为输出
这可能不是最优雅的解决方案,因为您必须将“附加”转换为字符串。
x = struct.unpack('f', str(extras))[0]
推荐阅读
- python - 在 QGraphicsViewer 中移动项目时如何固定图像
- swift - 如何快速获取 superview 框架的框架?
- python - 如何绘制特定属性而不是时间序列中所有属性的默认值
- scala - 如何使用 JDBC 在 spark (Scala) 中回滚插入/更新
- python - 获取具有相同字符串值的一组行的平均值
- android - 用于嵌套导航的 Flutter WillPopScope
- ruby - 如何解决自定义 RubyGem 的依赖关系?
- macos - 尝试在 Mac OS Catalina 上为 OpenCV for Python 3.6.5 安装 virtualenv 时出错
- azure - 密码重置流程 Azure AD B2C
- reactjs - 如何使用 Promise 创建受保护的路由