2013-01-16 24 views
35

में मैं एक YAML फ़ाइल लग रहा है किपढ़ना YAML अजगर

तरह
--- 
level_1: "test" 
level_2: 'NetApp, SOFS, ZFS Creation' 
request: 341570 
--- 
level_1: "test" 
level_2: 'NetApp, SOFS, ZFS Creation' 
request: 341569 
--- 
level_1: "test" 
level_2: 'NetApp, SOFS, ZFS Creation' 
request: 341568 

मैं इस YAML का उपयोग कर, लेकिन अजगर में नहीं YAML का उपयोग कर पर्ल में सही ढंग से पढ़ने के लिए कर रहा हूँ है। यह त्रुटि के साथ विफल:

expected a single document in the stream

कार्यक्रम:

import yaml 

stram = open("test", "r") 
print yaml.load(stram) 

त्रुटि:

Traceback (most recent call last): 
    File "abcd", line 4, in <module> 
    print yaml.load(stram) 
    File "/usr/local/pkgs/python-2.6.5/lib/python2.6/site-packages/yaml/__init__.py", line 58, in load 
    return loader.get_single_data() 
    File "/usr/local/pkgs/python-2.6.5/lib/python2.6/site-packages/yaml/constructor.py", line 42, in get_single_data 
    node = self.get_single_node() 
    File "/usr/local/pkgs/python-2.6.5/lib/python2.6/site-packages/yaml/composer.py", line 43, in get_single_node 
    event.start_mark) 
yaml.composer.ComposerError: expected a single document in the stream 
    in "test", line 2, column 1 
but found another document 
    in "test", line 5, column 1 
+0

संदर्भ के लिए देखने के अध्याय 2 http://www.yaml.org/spec/1.2 की (सिंटेक्स) /spec.html। यह 5 एमएन पढ़ा और इसके लायक है। – Titou

+0

देखें [मैं पाइथन में एक वाईएएमएल फ़ाइल कैसे पार्स कर सकता हूं] (https://stackoverflow.com/a/42054860/562769) –

उत्तर

58

YAML दस्तावेजों --- से अलग होते हैं, और किसी भी स्ट्रीम (जैसे एक फ़ाइल) अधिक होता है, तो एक दस्तावेज़ से अधिक आपको yaml.load के बजाय yaml.load_all फ़ंक्शन का उपयोग करना चाहिए। कोड: इनपुट फ़ाइल सवाल में प्रदान के लिए में

import yaml 

stream = open("test", "r") 
docs = yaml.load_all(stream) 
for doc in docs: 
    for k,v in doc.items(): 
     print k, "->", v 
    print "\n", 

परिणाम:

request -> 341570 
level_1 -> test 
level_2 -> NetApp, SOFS, ZFS Creation 

request -> 341569 
level_1 -> test 
level_2 -> NetApp, SOFS, ZFS Creation 

request -> 341568 
level_1 -> test 
level_2 -> NetApp, SOFS, ZFS Creation 
+17

यह उत्तर काम करता है। भविष्य की वंशावली के लिए, वे PyYAML मॉड्यूल का उपयोग कर रहे हैं, इसलिए आपको काम करने के लिए 'pyyaml ​​इंस्टॉल करें' पिप करना होगा। – wetjosh

संबंधित मुद्दे