因此,我编写了一个简短的Python脚本,通过首先检查其幻数/文件签名,在Windows中启动具有模糊扩展名的文件:
我想将它编译成一个.exe,以使关联变得更容易(使用byte或用C语言重写),但是我需要某种用户友好的配置文件来指定匹配的字节字符串和程序路径。基本上,我想以某种方式将这些信息放入纯文本文件中:
magic_numbers = {
# TINA
'OBSS': r'%PROGRAMFILES(X86)%\DesignSoft\Tina 9 - TI\TINA.EXE',
# PSpice
'*version': r'%PROGRAMFILES(X86)%\Orcad\Capture\Capture.exe',
'x100\x88\xce\xcf\xcfOrCAD ': '', #PSpice?
# Protel
'DProtel': r'%PROGRAMFILES(X86)%\Altium Designer S09 Viewer\dxp.exe',
# Eagle
'\x10\x80': r'%PROGRAMFILES(X86)%\EAGLE-5.11.0\bin\eagle.exe',
'\x10\x00': r'%PROGRAMFILES(X86)%\EAGLE-5.11.0\bin\eagle.exe',
'<?xml version="1.0" encoding="utf-8"?>\n<!DOCTYPE eagle ': r'%PROGRAMFILES(X86)%\EAGLE-5.11.0\bin\eagle.exe',
# PADS Logic
'\x00\xFE': r'C:\MentorGraphics\9.3PADS\SDD_HOME\Programs\powerlogic.exe',
}(十六进制字节只是任意字节,而不是Unicode字符。)
我想这种格式的.py文件是可行的,但我必须将其保留在未编译的位置,并以某种方式将其导入编译后的文件中,而且还有许多与{和,等无关的内容会被/搞砸。
我看了YAML,它会很好,除非它需要be 64编码二进制的东西,这不是我真正想要的。我希望配置文件包含字节的十六进制表示。还有ASCII表示,如果这是所有的文件签名。也许还能恢复正常。:D (例如,如果可以用不同数量的空格编写基于XML的格式)
有什么想法吗?
发布于 2012-03-13 17:41:37
你已经得到了答案: YAML。
上面发布的数据存储二进制数据的文本表示;这对YAML来说很好,您只需要正确地解析它。通常您会使用binascii模块中的一些内容;在本例中,很可能是binascii.a2b_qp函数。
magic_id_str = 'x100\x88\xce\xcf\xcfOrCAD '
magic_id = binascii.a2b_qp(magic_id_str)为了阐明,我将使用unicode字符作为将二进制数据粘贴到REPL (Python2.7)的简单方法:
>>> a = 'Φ'
>>> a
'\xce\xa6'
>>> binascii.b2a_qp(a)
'=CE=A6'
>>> magic_text = yaml.load("""
... magic_string: '=CE=A6'
... """)
>>> magic_text
{'magic_string': '=CE=A6'}
>>> binascii.a2b_qp(magic_text['magic_string'])
'\xce\xa6' 发布于 2012-03-13 20:12:29
我建议你换个方式。我会将这两种设置彼此解耦:
对于第一部分,我将使用python-魔术,一个绑定到利布魔术的库。您可以让python-魔术使用这样的自定义魔术文件:
import magic
m = magic.Magic(magic_file='/path/to/magic.file')您的用户可以指定一个自定义魔术文件,将魔术数字映射到mimetype。魔术文件的语法是记录在案。下面是一个示例,显示TIFF格式的神奇文件:
# Tag Image File Format, from Daniel Quinlan (quinlan@yggdrasil.com)
# The second word of TIFF files is the TIFF version number, 42, which has
# never changed. The TIFF specification recommends testing for it.
0 string MM\x00\x2a TIFF image data, big-endian
!:mime image/tiff
0 string II\x2a\x00 TIFF image data, little-endian
!:mime image/tiff第二部分非常简单,因为您现在只需要指定文本数据。您可以按照其他人的建议,使用INI或yaml格式,或者您甚至可以有一个简单的由制表符分隔的文件,如下所示:
image/tiff C:\Program Files\imageviewer.exe
application/json C:\Program Files\notepad.exe发布于 2012-03-13 16:30:45
我使用了一些包来构建配置文件,也是yaml。我建议您使用ConfigParser或ConfigObj。
最后,如果您想要构建一个带有注释的人类可读的配置文件,那么最好的选择是使用ConfigObj。
享受吧!
ConfigObj示例
使用此代码:
您也可以使用ConfigObj来存储它们。试试看这个:进口信托
def createConfig(path):
config = configobj.ConfigObj()
config.filename = path
config["Sony"] = {}
config["Sony"]["product"] = "Sony PS3"
config["Sony"]["accessories"] = ['controller', 'eye', 'memory stick']
config["Sony"]["retail price"] = "$400"
config["Sony"]["binary one"]= bin(173)
config.write()你得到这份文件:
[Sony]
product = Sony PS3
accessories = controller, eye, memory stick
retail price = $400
binary one = 0b10101101https://stackoverflow.com/questions/9687841
复制相似问题