كيف يتم معالجة تيار YAML في بيثون
-
06-07-2019 - |
سؤال
ولدي سطر الأوامر التطبيق البيانات YAML النواتج مستمر في النموذج:
- col0: datum0 col1: datum1 col2: datum2 - col0: datum0 col1: datum1 col2: datum2 ...
ولا يفعل ذلك لجميع من الخلود. وأود أن كتابة السيناريو بيثون الذي يقرأ باستمرار كل من هذه السجلات.
ويبدو أن مكتبة PyYAML أفضل في التقاط خيوط محملة بالكامل وتفسير تلك بوصفها وثيقة YAML كاملة. هل هناك طريقة لوضع PyYAML إلى وضع "تدفق"؟
وأم بي الخيار الوحيد لشريحة البيانات نفسي ويطعمه شيئا فشيئا إلى PyYAML؟
المحلول
وهنا هو ما كنت انتهت باستخدام لأن هناك لا يبدو أن هناك أسلوب مضمنة لتحقيق ما أريد. وينبغي أن تكون هذه الوظيفة عام يكفي أنه يمكن قراءة في تيار من YAML والعودة الكائنات مستوى أعلى كما واجهت فيها.
def streamInYAML(stream):
y = stream.readline()
cont = 1
while cont:
l = stream.readline()
if len(l) == 0:
cont = 0
else:
if l.startswith(' '):
y = y + l
else:
yield yaml.load(y)
y = l
ويمكن لأي شخص أن يفعل أفضل؟
نصائح أخرى
وجميع المراجع لتيار في وثائق يبدو أنها اشارة الى سيل من الوثائق ... لم يسبق لي ان حاولت استخدامها في الطريقة التي وصف، ولكن يبدو أن تجزئة معلومات البيانات في مثل هذا الدفق الوثائق هو نهج معقول.