2012-02-03 27 views
8

Örnek Using YAML with PythonSaf python'dan nasıl bir yaml dosyası oluşturabilirim?

Orijinal YAML dosyasından yaml.load() kullanarak dosyadan içeriği yükledikten sonra bu

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

içerir ve yeni bir YAML dosyasına dökümü, bu yerine alıyorum:

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

YAML dosyasını düz pythondan oluşturmanın doğru yolu nedir? Ben kendi kendime yazı yazmak istemiyorum. Sözlük ve liste oluşturmak istiyorum. Kısmi


...

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

Aynı dosyayı almayı nasıl garanti edeceğinizi soruyor musunuz? Eğer öyleyse, hiçbir garanti yoktur, çünkü sözlüklerin önceden belirlenmiş bir sırası yoktur. – Nate

+0

@Nate Right, bu benim niyetim. Onu anlıyorum. Yapının bir kısmını düzenledim ve sağladım. Yaml dumps iç {isim: Node 1-1} başka bir düzeye parasellemek olamaz .... – CppLearner

cevap

7

tamam. Sadece belgeleri kontrol ettim. Biz yaml.dump(data, optional_args)

düzeltme sonunda bu ihtiyaç dataMap kaynak yaml.load() ve f yazılacak dosyasıdır bu

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

olduğunu.

+0

Bu dökümü '#tree biçiminde' yorum yazmaz. – Anthon

1

http://pyyaml.org/wiki/PyYAMLDocumentation#Dictionarieswithoutnestedcollectionsarenotdumpedcorrectly göstermek çıkışı yaml.dump() bir yorumunu içerir ve PyYAML değil yaptığı gibi üretilen şeyin değil kopyala-yapıştır, sen muhtemelen gibi PyYAML kullandığınız varsayılarak Bunları yaz. Eğer (bir revizyon kontrol sisteminde dosyayı depolamak zaman güzel) dosyasında olduğu yorumunu yanı örn gibi anahtar sipariş korumak istiyorsanız

kullanmak ¹:

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) 

size tam alır girişi:

# 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 

Bu ruamel.yaml Ben yazar olduğum PyYAML gelişmiş bir sürümü kullanılarak yapıldı ¹.

İlgili konular