هل هناك طريقة رفيعة المستوى للقراءة في خطوط من ملف إخراج ولديها الأنواع المعترف بها من قبل هيكل المحتويات؟

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

  •  23-08-2019
  •  | 
  •  

سؤال

افترض أن لدي ملف إخراج أرغب في القراءة وتم إنشاء كل سطر من خلال الانضمام إلى عدة أنواع معا، وإعداد قائمة الأقواس القائمة وإلحاقها

[('tupleValueA','tupleValueB'), 'someString', ('anotherTupleA','anotherTupleB')]

اريد اقرأ الخطوط

بعد بناء وظيفة للقيام بذلك حاولت العثور على نهج أعلى مستوى ولكن لم أجد واحدة.

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

المحلول

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

>>> print eval("[('tupleValueA', 1), 'someString']")
[('tupleValueA', 1), 'someString']

إذا كانت لديك السيطرة على البرنامج النصي الذي يولد ملف الإخراج، فسوف أقترح عليك استخدام json. التشفير. يشبه تنسيق JSON إلى حد كبير تمثيل سلسلة Python للقوائم والقواميس. وسيكون أكثر أمانا وأقل قدرا من القراءة من.

>>> import json
>>> json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}])
'["foo", {"bar": ["baz", null, 1.0, 2]}]'
>>> json.loads('["foo", {"bar": ["baz", null, 1.0, 2]}]')
["foo", {"bar": ["baz", null, 1.0, 2]}]

نصائح أخرى

يشار إلى المشكلة التي تصفها تقليديا تسلسل. تدوين كائن جافا سكريبت (JSON) هو واحد بروتوكول التسلسل الشهير.

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top