ما تنسيق ملف التكوين لاستخدامه في سلاسل سهلة الاستخدام من وحدات البايت التعسفية?
-
13-12-2019 - |
سؤال
لذلك أنا جعلت النصي بيثون قصيرة لإطلاق الملفات في ويندوز مع ملحقات غامضة من خلال دراسة بهم الرقم السحري / توقيع الملف أولا:
أود أن تجميع ل .إيكس لجعل جمعية أسهل (إما باستخدام ببفريز أو إعادة كتابة في ج) ، ولكن أنا بحاجة إلى نوع من ملف التكوين سهل الاستعمال لتحديد سلاسل بايت مطابقة ومسارات البرنامج.أساسا أريد أن أضع هذه المعلومات في ملف نص عادي بطريقة أو بأخرى:
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'
نصائح أخرى
أود أن أقترح القيام بذلك بشكل مختلف قليلا.وأود أن فصل هذه الإعدادات اثنين من بعضها البعض:
- توقيع الرقم السحري = = = > نوع المحاكاة
- ميمتيب = = > برنامج قاذفة
بالنسبة للجزء الأول ، وأود أن استخدام بيثون-ماجيك, ، مكتبة تحتوي على روابط إلى ليبماجيك.هل يمكن أن يكون بيثون ماجيك استخدام ملف سحري مخصص مثل هذا:
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