2012-02-03 39 views
8

उदाहरण yaml.load() का उपयोग कर फ़ाइल से सामग्री लोड करने के बाद होता है इसमैं शुद्ध पायथन से एक yaml फ़ाइल कैसे बना सकता हूं? <a href="http://mikkel.elmholdt.dk/?p=4" rel="nofollow noreferrer">Using YAML with Python</a></p> <p>मूल YAML फ़ाइल से

# tree format 
treeroot: 
    branch1: 
     name: Node 1 
     branch1-1: 
      name: Node 1-1 
    branch2: 
     name: Node 2 
     branch2-1: 
      name: Node 2-1 

, और एक नया YAML फ़ाइल में डंप, मैं इस बजाय:

# tree format 
treeroot: 
    branch1: 
     branch1-1: {name:Node 1-1} 
     name: Node 1 
    branch2: 
     branch2-1: {name: Node 2-1} 
     name: Node 2 

शुद्ध पायथन से सीधे वाईएएमएल फ़ाइल बनाने का उचित तरीका क्या है? मैं खुद स्ट्रिंग लिखना नहीं चाहता। मैं शब्दकोश और सूची बनाना चाहता हूं।


आंशिक ...

dataMap = {'treeroot': 
       {'branch2': 
       {'branch1-1': 
        {'name': 'Node 1-1'}, # should be its own level 
        'name': 'Node 1' 
       } 
       } 
      } 
+1

क्या आप पूछ रहे हैं कि आप उसी फ़ाइल को कैसे प्राप्त करने की गारंटी दे सकते हैं? यदि हां, तो कोई गारंटी नहीं है, क्योंकि शब्दकोशों में कोई पूर्वनिर्धारित आदेश नहीं है। – Nate

+0

@ नेट सही, यह मेरा इरादा है। मैं समझता हूँ कि। मैंने संपादित किया और संरचना का हिस्सा प्रदान किया। यम डंप आंतरिक {नाम: नोड 1-1} को दूसरे स्तर पर नहीं रोक सकते हैं .... – CppLearner

उत्तर

7

ठीक है। मैंने सिर्फ दस्तावेज की जांच की है। हम yaml.dump(data, optional_args)

ठीक के अंत में इस जरूरत इस

yaml.dump(dataMap, f, default_flow_style=False) 

जहां dataMap स्रोत yaml.load() और च फ़ाइल को लिखा जा रहा है है।

+0

यह डंप '#tree प्रारूप 'टिप्पणी नहीं लिखता है। – Anthon

1

आप PyYAML उपयोग कर रहे हैं जैसा कि आप शायद कर रहे हैं मान लिया जाये, उत्पादन आपको बताएंगे कि नहीं क्या एक yaml.dump() उत्पन्न के रूप में यह एक टिप्पणी भी शामिल है, और PyYAML नहीं की कॉपी-पेस्ट है उनको लिखें।

आप (जब आप एक संशोधन नियंत्रण प्रणाली में फ़ाइल की दुकान अच्छा) है कि टिप्पणी, साथ ही जैसे के रूप में फ़ाइल में महत्वपूर्ण आदेश की रक्षा करना चाहते हैं का उपयोग ¹:

import ruamel.yaml as yaml 

yaml_str = """\ 
# tree format 
treeroot: 
    branch1: 
     name: Node 1 
     branch1-1: 
      name: Node 1-1 # should be its own level 
    branch2: 
     name: Node 2 
     branch2-1: 
      name: Node 2-1 
""" 

data = yaml.load(yaml_str, Loader=yaml.RoundTripLoader) 
print yaml.dump(data, Dumper=yaml.RoundTripDumper, indent=4) 

जो आप वास्तव में हो जाता है इनपुट:

# tree format 
treeroot: 
    branch1: 
     name: Node 1 
     branch1-1: 
      name: Node 1-1 # should be its own level 
    branch2: 
     name: Node 2 
     branch2-1: 
      name: Node 2-1 

¹ यह ruamel.yaml PyYAML का एक उन्नत संस्करण जिनमें से मैं लेखक हूँ का उपयोग किया गया था।

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