我想读取和解码二进制文件以获取值。
在我用来读取文件的代码下面:
with open("modele_petite_zone.op2", "rb") as op2File :
for lines in op2File :
byte = op2File.read()
print(byte)
这是我输出的一部分:
b'\ xaf \ xc9Dq \ xdd \ xa8 \ xc44 \ x08 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x9e \ xdd \ x1f \ x004 \ x08 \ x08 \ x00 \ x00 \ x00 \ xb0 \ x97EHq \ xccD {\ xdc \ xc3 \ xc44 \ x08 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x9f \ xdd \ x1f \ x004 \ x08 \ x00 \ x00 \ x00 \ xb0 \ x97E3S \ xc1D {4 \ xbf \ xc44 \ x08 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ xa8 \ xdd \ x1f \ x004 \ x08 \ x00 \ x00 \ x00 \ xb0 \ x97E \ xe1 \ xc2 \ xc2D \ xc3 \ xed \ xd7 \ xc44 \ x08 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ xa9 \ xdd \ x1f \ x004 \ x08 \ x00 \ x00 \ x00 \ xb0 \ x97Ef \ xb6 \ xb7D \ xa4 \ xd8 \ xd1 \ xc44 \ x08 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ xb2 \ xdd \ x1f \ x004 \ x08 \ x00 \ x00 \ x00 \ xb0 \ x97ER \ x10 \ xb7DR \ xc8 \ xea \ xc44 \ x08 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ xb5 \ xdd \ x1f \ x004 \ x08 \ x00 \ x00 \ x00 \ xb0 \ x97E \ xa40 \ xacD \ xec1 \ xe3 \ xc44 \ x08 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ xbc \ xdd \ x1f \ x004 \ x08 \ x00 \ x00 \ x00 \ xb0 \ x97E \ xcd | \ xa9D \ x00 @ \ xfc \ xc44 \ x08 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ xbd \ xdd \ x1f \ x004 \ x08 \ x00 \ x00 \ x00 \ xb0 \ x97E \ x1f \ xed \ x9eD \ x1f \ x15 \ xf3 \ xc44 \ x08 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ xec \ x01 \ x00 \ x00 \ x04 \ x00 \ x00 \ x00 \ xfb \ xff \ x ff \ xff \ x04 \ x00 \ x00 \ x00 \ x04 \ x00 \ x00 \ x00 \ x01 \ x00 \ x00 \ x00 \ x04 \ x00 \ x00 \ x00 \ x00 \ x04 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x04 \ x00 \ x00 \ x00 \ x04 \ x00 \ x00 \ x00 \ x03 \ x00 \ x00 \ x00 \ x04 \ x00 \ x00 \ x00 \ x0c \ x00 \ x00 \ x00 \ x00 \ xff \ xff \ x00 \ x00 \ xff \ xff \ x00 \ x00 \ xff \ xff \ x00 \ x00 \ x0c \ x00 \ x00 \ x00 \ x04 \ x04 \ x00 \ x00 \ x00 \ xfa \ xff \ xff \ xff \ xff \ x04 \ x00 \ x00 \ x00 \ x00 \ x04 \ x00 \ x00 \ x00 \ x01 \ x00 \ x00 \ x00 \ x04 \ x00 \ x00 \ x00 \ x04 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x04 \ x00 \ x00 \ x00 \ x04 \ x04 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x04 \ x00 \ x00 \ x00 \ x04 \ x00 \ x00 \ x00 \ x02 \ x00 \ x00 \ x00 \ x04 \ x04 \ x00 \ x00 \ x00 \ x08 \ x00 \ x00 \ x00 \ x00GEOM3
我该如何解码ouptut?
二进制文件可以在这里下载:https://www.dropbox.com/s/uimba2xojc55uii/modele_petite_zone.op2?dl=0
答案 0 :(得分:2)
二进制格式表示保存的文件不可读为文本。但是,二进制文件不是可以轻松解析的标准,它仅表示将数据另存为“数据”(位)而不是文本。实际的格式(或结构)可以是开源的也可以是专有的,这意味着它可能是可解析的(如果您知道如何读取数据)或几乎无法理解。
op2格式似乎是已知的,并且实现了可以解析文件的模块(请在此处查看格式说明https://docs.plm.automation.siemens.com/tdoc/nxnastran/11/help/#uid:index_dmap:xid666580:id496821)。
检出此模块以解析op2文件: https://pynastran-git.readthedocs.io/en/latest/index.html
示例:
from pyNastran.op2.op2 import OP2
model = OP2()
model.read_op2("modele_petite_zone.op2")
print(model.get_op2_stats())