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

时间:2009-10-18 20:30:28

标签: python format ascii binary-data

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

但是,我需要查看二进制文件,以确保参数是我需要的,我似乎无法做到。

我想在Python中编写一个脚本,它允许我读取二进制文件,搜索我关心的参数,并显示它们的值。

我对二进制文件的了解:

它表示简单文本(与图像或soud文件相对)。有一段代码可以将文件“转储”为可读格式:如果我在Emacs中打开该转储,我会发现如下内容:

CENTRAL_BODY = 'SUN'

所有文件只是一系列类似的说明。我可以使用那个转储代码,但我更喜欢让Python做到这一点。

这似乎是一个非常微不足道的问题,我为不知道更好而道歉。我以为我是一名熟练的程序员!

非常感谢。

4 个答案:

答案 0 :(得分:4)

您可以将文件的内容读入内存中的字符串:

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

然后在其中找到一个字符串:

where = thedata.find('CENTRAL_BODY')

最后切掉你关心的部分:

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

并根据您的喜好显示(例如,通过查找thepart =符号找到字符串值,然后是第一个引用,然后是之后的下一个引号。

答案 1 :(得分:1)

听起来这个“转储”程序已经完成了你所需要的:解释二进制文件。我想我的方法是编写一个python程序,它可以获取一个转储文件,提取你想要的参数并显示它们。

然后用这样的东西解析它:

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

您没有提及平台或提供有关转储格式的详细信息,但这应该是一个开始的地方。

答案 2 :(得分:0)

如果是二进制文件,则需要使用struct模块。您需要知道数据在文件中的格式。如果没有记录,您将不得不对其进行逆向工程。

你有其他转储程序的源代码吗?您可以将其移植到Python

如果我们可以看到二进制文件和相应的转储看起来像

,我们可以帮助你

答案 3 :(得分:0)

您必须知道数据存储的格式;根本就没办法。

如果没有书面规范,请尝试在十六进制编辑器中打开它并使用文本转储作为参考来研究格式。如果您可以获得创建文本转储的工具的源代码,那将有助于您。

请记住,数据可能会以某种方式加扰,例如: ROT13。