2013-02-13 18 views
10

Bazı verileri dönüştürmek için PyYAML'u kullanmaya başladım.PyYAML değer dönüşümünü devre dışı bırak

Sadece yaml.load işlevini kullanıyorum ve tüm değerleri tek kodlu dizgeye, int, tarihlere vb. Dönüştürmeye çalıştığını fark edene kadar benim için yeterince iyi oldu.

Uygulamamda bu ölümcül olabilir, bu dönüşümü engellemenin bir yolu var mı? Her şeyi dizeler olarak almak istiyorum. Kuruculara baktım ve bu dönüşümü devre dışı bırakmanın bir yolunu bulamadım.

Güncelleme: yaml.load'dan elde ettiğim bir OrderedDict ve her şey iyi görünüyor. Tek sorun, bazı değerlerin dize ve bazılarının int olmasıdır. Bütün değerleri dizgiler olarak almak istiyorum. Değerleri benim için dönüştürmek için pyyaml ​​istemiyorum.

+0

Sonra YAML deşifre değiliz. Ayrıca, ** tam olarak ne ** ne dizeleri olarak bırakmak istersiniz? Eğer * her şeyi * bir dizeden bırakırsanız, 'the_file.read()' ;-) ;-) – delnan

+0

Ayrıştırmak için pyyaml ​​kullanıyorum dosya aslında yaml değil ama yeterince yakın. Bu nedenle tip dönüşümden kaçınmak istiyorum. – theAlse

+0

Ama * ne tür bir tür dönüşüm? Listeler almak ister misiniz? Sözlükler? Boolelerin dönüştürülmesini ister misin? Şamandıralar? Rasgele derinliğe mi yoksa sabit bir format mı? Bu haliyle, bu çok az belirtilmiş bir yoldur. – delnan

cevap

22

Eh, bir dize olarak her şeyi terk etmek Loader=yaml.BaseLoader kullanabilirsiniz:

>>> x = [[1,2,3], {1:2}] 
>>> s = yaml.dump(x) 
>>> s 
'- [1, 2, 3]\n- {1: 2}\n' 
>>> yaml.load(s) 
[[1, 2, 3], {1: 2}] 
>>> yaml.load(s, Loader=yaml.BaseLoader) 
[[u'1', u'2', u'3'], {u'1': u'2'}] 
+1

Dikkat: Bu, otomatik değer dönüşümünü devre dışı bırakırken, aynı zamanda "<<" birleştirme anahtarının artık tek bir seviyeden daha fazla çalışmamasına neden oluyor gibi görünüyor (yani "<<" - bir çapa düğümünü kendisinin de birleştirmesi "<< "-Diğer çapa düğümleri artık çalışmayacak" - PyYAML 3.10 ve 3.11 üzerinde test edildi – voetsjoeba

İlgili konular