因此,我制作了一个简短的 Python 脚本,通过检查文件的 magic number/file signature 来在 Windows 中启动具有不明确扩展名的文件。第一:
我想将它编译为 .exe 以便于关联(使用 bbfreeze 或用 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,它会很棒,只是它首先需要 base64 编码的二进制内容,而这并不是我真正想要的。我更喜欢配置文件包含字节的十六进制表示。还有 ASCII 表示,如果这就是文件签名的话。也许还有正则表达式。 :D(例如,如果基于 XML 的格式可以用不同数量的空格编写)
有什么想法吗?
请您参考如下方法:
您已经有了答案:YAML。
您在上面发布的数据是存储二进制数据的文本表示;这对 YAML 没问题,你只需要正确解析它。通常你会使用 binascii 模块中的东西;在这种情况下,可能是 binascii.a2b_qp 函数。
magic_id_str = 'x100\x88\xce\xcf\xcfOrCAD '
magic_id = binascii.a2b_qp(magic_id_str)
为了阐明,我将使用 unicode 字符作为将二进制数据粘贴到 REPL (Python 2.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'
