سؤال

أحتاج إلى متجر الثعبان الهياكل المصنوعة من قوائم / قواميس, الصفوف في تنسيق قابل للقراءة.الفكرة هي مثل استخدام شيء مشابه المخلل, لكن المخلل لا دية الإنسان.الخيارات الأخرى التي تتبادر إلى ذهني هي YAML (من خلال PyYAML و سلمان (من خلال simplejson) serializers.

أي الخيار الذي يأتي إلى ذهنك ؟

شكرا مقدما.

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

المحلول

لحالات بسيطة pprint () وحدة التقييم () تتبادر إلى الذهن.

وعن طريق المثال الخاص بك:

>>> d = {'age': 27,
...  'name': 'Joe',
...  'numbers': [1, 
...              2, 
...              3,
...              4,
...              5],
...  'subdict': {
...              'first': 1, 
...              'second': 2,
...               'third': 3
...              }
... }
>>> 
>>> from pprint import pprint
>>> pprint(d)
{'age': 27,
 'name': 'Joe',
 'numbers': [1, 2, 3, 4, 5],
 'subdict': {'first': 1, 'second': 2, 'third': 3}}
>>> 

وأود أن تفكر مرتين تحديد شرطين بنفس الأداة. هل يعتبر استخدام المخلل للالتسلسلية ثم pprint () (أو المشاهد وجوه أكثر نزوة) للإنسان يبحث في الكائنات؟

نصائح أخرى

إذا فقط بيثون قائمة المهام, القاموس و tuple الكائن.- سلمان هو الطريق للذهاب.الإنسان للقراءة ، من السهل جدا في التعامل معها لغة مستقلة أيضا.

تنبيه:الصفوف سيتم تحويلها إلى قوائم في simplejson.

In [109]: simplejson.loads(simplejson.dumps({'d':(12,3,4,4,5)}))
Out[109]: {u'd': [12, 3, 4, 4, 5]}

إذا كنت بعد أكثر تعهدات من مشمولة JSON, أنا أوصي التحقق من بيون (الثعبان تدوين كائن)...على الرغم من أنني أعتقد انها تقتصر على 2.6/3.0 وما فوق ، كما أنه يعتمد على ast وحدة نمطية.أنه يتعامل مع فئة مخصصة حالات متكررة أنواع البيانات ، من بين الميزات الأخرى التي هي أكثر من التي تقدمها JSON.

ويجب أن تحقق من jsonpickle ( https://github.com/jsonpickle/jsonpickle ). فإنه سيتم كتابة من أي كائن بيثون في ملف سلمان. يمكنك ثم قراءة هذا الملف مرة أخرى إلى كائن الثعبان. والشيء الجميل هو ملف المنتصف قابل للقراءة للغاية لأنها سلمان.

وماذا تعني هذه ليست الإنسان للقراءة ؟؟؟ ؛)

>>> d = {'age': 27, 
...   'name': 'Joe',
...   'numbers': [1,2,3,4,5],
...   'subdict': {'first':1, 'second':2, 'third':3}
... }
>>> 
>>> import pickle
>>> p = pickle.dumps(d)      
>>> p
"(dp0\nS'age'\np1\nI27\nsS'subdict'\np2\n(dp3\nS'second'\np4\nI2\nsS'third'\np5\nI3\nsS'first'\np6\nI1\nssS'name'\np7\nS'Joe'\np8\nsS'numbers'\np9\n(lp10\nI1\naI2\naI3\naI4\naI5\nas."

حسنا، حسنا، ربما يستغرق سوى بعض الممارسات ... أو هل يمكن خداع ...

>>> import pickletools 
>>> pickletools.dis(p)
    0: (    MARK
    1: d        DICT       (MARK at 0)
    2: p    PUT        0
    5: S    STRING     'age'
   12: p    PUT        1
   15: I    INT        27
   19: s    SETITEM
   20: S    STRING     'subdict'
   31: p    PUT        2
   34: (    MARK
   35: d        DICT       (MARK at 34)
   36: p    PUT        3
   39: S    STRING     'second'
   49: p    PUT        4
   52: I    INT        2
   55: s    SETITEM
   56: S    STRING     'third'
   65: p    PUT        5
   68: I    INT        3
   71: s    SETITEM
   72: S    STRING     'first'
   81: p    PUT        6
   84: I    INT        1
   87: s    SETITEM
   88: s    SETITEM
   89: S    STRING     'name'
   97: p    PUT        7
  100: S    STRING     'Joe'
  107: p    PUT        8
  110: s    SETITEM
  111: S    STRING     'numbers'
  122: p    PUT        9
  125: (    MARK
  126: l        LIST       (MARK at 125)
  127: p    PUT        10
  131: I    INT        1
  134: a    APPEND
  135: I    INT        2
  138: a    APPEND
  139: I    INT        3
  142: a    APPEND
  143: I    INT        4
  146: a    APPEND
  147: I    INT        5
  150: a    APPEND
  151: s    SETITEM
  152: .    STOP
highest protocol among opcodes = 0
>>> 

وكنت لا تزال لديك لقراءة الكائن مخلل من ملف، ومع ذلك فإنك لن تحتاج إلى load ذلك. لذا، إذا انها "خطير" وجوه، لا يزال قد تكون قادرة على هذا الرقم قبل القيام load. إذا كنت عالقة مع pickle، قد يكون خيارا جيدا للفك رموز ما لديك.

لاستخدام simplejson أولا على easy_install simplejson : ل

import simplejson
my_structure = {"name":"Joe", "age":27, "numbers":[1,2,3,4,5], "subdict":{"first":1, "second":2, "third": 3}}
json = simplejson.dumps(my_structure)

والنتائج في كائن JSON:

{"age": 27, "subdict": {"second": 2, "third": 3, "first": 1}, "name": "Joe", "numbers": [1, 2, 3, 4, 5]}

لاحظ أن في يطرأ تغير شكل القاموس على الإطلاق، ولكن يجب تشغيله من خلال هذه الخطوة إلى ضمان البيانات JSON صالحة.

ويمكنك طباعة مزيد كبير نتيجة:

import pprint
pprint.pprint(my_structure)

نتائج البحث في

{'age': 27,
 'name': 'Joe',
 'numbers': [1, 2, 3, 4, 5],
 'subdict': {'first': 1, 'second': 2, 'third': 3}}

هناك أكسون (نصية) الشكل التي تجمع بين أفضل من JSON, XML و YAML.أكسون تنسيق جدا للقراءة المدمجة نسبيا.

الثعبان (2.7/3.3-3.7) وحدة pyaxon يدعم load(s)/dump(s) وظائف تكرارية بما في ذلك loading/dumping.انها سريعة بما فيه الكفاية لكي تكون مفيدة.

النظر في مثال بسيط:

>>> d = {
     'age': 27, 'name': 'Joe', 
     'numbers': [1, 2, 3, 4, 5], 
     'subdict': {'first': 1, 'second': 2, 'third': 3}
    }
# pretty form
>>> axon.dumps(d, pretty=1)
{ age: 27
  name: "Joe"
  numbers: [1 2 3 4 5]
  subdict: {
    first: 1
    second: 2
    third: 3}}
# compact form
>>> axon.dumps(d)
{age:27 name:"Joe" numbers:[1 2 3 4 5] subdict:{first:1 second:2 third:3}}

فإنه يمكن أيضا التعامل مع كائنات متعددة في الرسالة:

>>> msg = axon.dumps([{'a':1, 'b':2, 'c':3}, {'a':2, 'b':3, 'c':4}])
>>> print(msg)
{a:1 b:2 c:3} 
{a:2 b:3 c:4}
{a:3 b:4 c:5}

ومن ثم تحميلها تكرارا:

for d in axon.iloads(msg):
   print(d)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top