使用Python处理人可读的二进制数据

2 投票
4 回答
2375 浏览
提问于 2025-04-15 15:10

我的工作需要我进行一个数学模拟,这个模拟的参数来自一个二进制文件。模拟器可以毫无问题地读取这个二进制文件。

不过,我需要打开这个二进制文件,看看里面的参数是否是我需要的,但我似乎无法做到这一点。

我想用Python写一个脚本,这样我就可以读取这个二进制文件,查找我关心的参数,并显示它们的值。

关于这个二进制文件,我知道:

它表示的是简单的文本(而不是图像或声音文件)。有一段代码可以把文件“转储”成可读的格式:如果我在Emacs中打开这个转储,我会看到一些类似这样的内容:

CENTRAL_BODY = 'SUN'

整个文件其实就是一系列类似的指令。我可以使用那个转储代码,但我更希望用Python来完成这个工作。

这似乎是个很简单的问题,我为自己不知道而感到抱歉。我原以为自己是个熟练的程序员呢!

非常感谢。

4 个回答

1

如果这是一个二进制文件,你需要使用一个叫做结构模块(struct module)的工具。你得知道文件里数据是怎么排版的。如果没有相关的说明文档,你就得自己去分析它。

你有没有其他转储程序的源代码?你可能可以把它直接移植到Python里。

如果我们能看到这个二进制文件和对应的转储内容,可能会更好地帮助你。

4

你可以把文件的内容读到内存中的一个字符串里:

thedata = open(thefilename, 'rb').read()

然后在这个字符串里找到你想要的内容:

where = thedata.find('CENTRAL_BODY')

最后把你关心的部分切出来:

thepart = thedata[where:where+50]  # or whatever length

然后按照你的需要显示出来(比如,可以通过在 thepart 中找到一个 = 符号,然后找到第一个后面的引号,再找到下一个引号来找到字符串的值)。

1

听起来这个“dump”程序已经能满足你的需求了:它可以解读二进制文件。我想我的做法是写一个Python程序,能够读取这个dump出来的文件,提取你想要的参数并显示出来。

然后可以用类似这样的方式来解析:

myparms.py:

import sys

d = {}
for line in sys.stdin:
    parts = line.split("=",2)
    if len(parts) < 2:
        continue
    k = parts[0].strip()
    v = parts[1].strip()
    d[k] = v

print d['CENTRAL_BODY']

使用方法如下:

dump parameters.bin | python myparms.py

你没有提到具体的平台或者dump出来的格式的细节,但这应该是一个好的起点。

撰写回答