ما تنسيق ملف التكوين لاستخدامه في سلاسل سهلة الاستخدام من وحدات البايت التعسفية?

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

سؤال

لذلك أنا جعلت النصي بيثون قصيرة لإطلاق الملفات في ويندوز مع ملحقات غامضة من خلال دراسة بهم الرقم السحري / توقيع الملف أولا:

أود أن تجميع ل .إيكس لجعل جمعية أسهل (إما باستخدام ببفريز أو إعادة كتابة في ج) ، ولكن أنا بحاجة إلى نوع من ملف التكوين سهل الاستعمال لتحديد سلاسل بايت مطابقة ومسارات البرنامج.أساسا أريد أن أضع هذه المعلومات في ملف نص عادي بطريقة أو بأخرى:

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

(بايت عرافة هي مجرد بايت التعسفي ، وليس أحرف يونيكود.)

أعتقد أن ملف الحمر في هذا التنسيق يعمل ، ولكن لا بد لي من تركه غير مرتبط ولا يزال بطريقة ما يستورده إلى الملف المترجم ، ولا يزال هناك مجموعة من المحتويات الدخيلة مثل { و , أن يكون الخلط من قبل / المسمار.

نظرت إلى يمل ، وسيكون كبيرا إلا أنه يتطلب باس64 ترميز الاشياء الثنائية أولا ، وهي ليست حقا ما أريد.أفضل أن يحتوي ملف التكوين على تمثيلات سداسية عشرية للبايت.ولكن أيضا تمثيلات أسي ، إذا كان هذا كل توقيع الملف هو.وربما أيضا ريجكسيس.: د (في حالة يمكن كتابة التنسيق القائم على شمل مع كميات مختلفة من المسافات البيضاء ، على سبيل المثال)

أي أفكار?

هل كانت مفيدة؟

المحلول

لقد حصلت بالفعل على إجابتك:يمل.

البيانات التي نشرتها أعلاه هي تخزين تمثيلات نصية للبيانات الثنائية;وهذا سيكون على ما يرام ل يمل ، تحتاج فقط إلى تحليل بشكل صحيح.عادة كنت تستخدم شيئا من وحدة بيناسي;في هذه الحالة ، من المحتمل أن يكون binascii.a2b_qp وظيفة.

magic_id_str = 'x100\x88\xce\xcf\xcfOrCAD '
magic_id = binascii.a2b_qp(magic_id_str)

لتوضيح ، وسوف تستخدم حرف ونيكود كوسيلة سهلة للصق البيانات الثنائية في ريبل (بيثون 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'  

نصائح أخرى

أود أن أقترح القيام بذلك بشكل مختلف قليلا.وأود أن فصل هذه الإعدادات اثنين من بعضها البعض:

  1. توقيع الرقم السحري = = = > نوع المحاكاة
  2. ميمتيب = = > برنامج قاذفة

بالنسبة للجزء الأول ، وأود أن استخدام بيثون-ماجيك, ، مكتبة تحتوي على روابط إلى ليبماجيك.هل يمكن أن يكون بيثون ماجيك استخدام ملف سحري مخصص مثل هذا:

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

يمكن للمستخدمين تحديد ملف سحري مخصص لتعيين الأرقام السحرية لتقليد الأنواع.بناء جملة الملفات السحرية هو موثقة.في ما يلي مثال يوضح الملف السحري لتنسيق المشاجرة:

# 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

الجزء الثاني إذن سهل جدا ، لأنك تحتاج فقط إلى تحديد البيانات النصية الآن.هل يمكن أن تذهب مع تنسيق إيني أو يمل ، كما اقترح من قبل الآخرين، أو هل يمكن أن يكون حتى مجرد ملف بسيط محدد علامة التبويب مثل هذا:

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

لقد استخدمت بعض الحزم لبناء ملفات التكوين ، أيضا يمل.أوصي باستخدام كونفيغبارسر أو كونفيغوبج.

في الماضي ، فإن أفضل خيار إذا كنت تريد بناء ملف التكوين للقراءة البشرية مع تعليقات أوصي بشدة استخدام كونفيغوبج.

استمتع!

مثال على التكوين

مع هذا الرمز:

يمكنك استخدام كونفيغوبج لتخزينها أيضا.جرب هذا:استيراد التكوين

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