任意のバイトのユーザーフレンドリーな文字列に使用する構成ファイル形式は?

StackOverflow https://stackoverflow.com//questions/9687841

質問

だから私はマジックナンバー/ファイルシグネチャーファースト:

.COSSIONを簡単にする(BBFREEZEまたはCで書き換えを使用して)、それを.EXEにコンパイルしたいが、一致するバイト文字列とプログラムパスを指定するためのいくつかの種類のユーザフレンドリマンス設定が必要です。基本的に私はこの情報を空中テキストファイルに入れたいです。

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', 
}
.

(16進数は、Unicode文字ではなく任意のバイトだけです。)

このフォーマットの.pyファイルを推測しますが、まだ解除してまだまだコンパイル済みファイルにインポートする必要があり、まだ{,のような余分なコンテンツがまだ/ねじ込まれるようになっています。 。

私はyamlを見ました、そしてそれが最初にbase64をエンコードするバイナリのものを必要とすることを除いて、それは素晴らしいでしょう。 BYTESのHEX表現を含む設定ファイルを設定します。それがすべてのファイル署名の場合は、ASCII表現も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)
.

解明するために、私はバイナリデータをRelpに貼り付ける簡単な方法としてUnicode文字を使用します(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'  
.

他のヒント

私はこれを少し異なるようにすることをお勧めします。私はこれら2つの設定を互いに切り離すでしょう:

  1. マジックナンバーシグネチャ===> MIMETYPE
  2. mimetype==>プログラムランチャー
  3. 最初の部分では、 python-magic 、バインディングを持つライブラリを使用します。 libmagic 。 Python-Magicはこのようなカスタムマジックファイルを使用することができます。

    import magic
    m = magic.Magic(magic_file='/path/to/magic.file')
    
    .

    あなたのユーザーは、マジックナンバーマッピングマジックファイルをMimeTypesに指定できます。マジックファイルの構文は文書化です。 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
    
    .

    2番目の部分は、テキストデータを指定するだけでよいため、かなり簡単です。他の人に提案されているように、INIまたはYAMLの形式で行くことも、このような単純なタブ区切りファイルも行うこともできます。

    image/tiff         C:\Program Files\imageviewer.exe
    application/json   C:\Program Files\notepad.exe
    
    .

設定ファイルも構築するためのパッケージを使用しました。ConfigParserまたはConfigObjを使用することをお勧めします。

最後に、最適なオプションは、コメントを使用して人間が読める設定ファイルを構築したいのであれば、configobjを強くお勧めします。

楽しい!

configobj

の例

このコードでは:

CofipObjを使用してそれらを保存することもできます。これを試してください: Import 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 = 0b10101101
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top