Farklı ortamlar için dosyaları yapılandırmak üzere PyYAML kullanıyoruz. Ancak YAML bloklarımız bütünlüğünü kaybeder.Ayrıştırılmış bir belgeyi dökerken YAML blok yapısını korumak mümkün mü?
ver
pubkey: |
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSq7OPxRrQEBAQUAA4GNADCBiQKBgQCvRVUKp6pr4qBEnE9lviuyfiNq
QtG/OCyBDXL4Bh3FmUzfNI+Z4Bh3FmUx+z2n0FCv/4BpgHTDl8D95NPopWVo1RH2
UfhyMd6dQ/x9T5m+y38JMzmSVAk+Fqu8ya18+yQVOEyEIx3Gxpsgegow33gcxfjK
EsUgJHXcpw7OPxRrCQIDAQAB
-----END PUBLIC KEY-----
... python3 kullanarak bu programı yürütme ...
import yaml
with open('input.yml', mode='r') as f:
parsed = yaml.safe_load(f)
with open('output.yml', mode='w') as f:
yaml.dump(parsed, f)
... üretir input.yml
... Bu output.yml
...
pubkey: '-----BEGIN PUBLIC KEY-----
MIGfMA0GCSq7OPxRrQEBAQUAA4GNADCBiQKBgQCvRVUKp6pr4qBEnE9lviuyfiNq
QtG/OCyBDXL4Bh3FmUzfNI+Z4Bh3FmUx+z2n0FCv/4BpgHTDl8D95NPopWVo1RH2
UfhyMd6dQ/x9T5m+y38JMzmSVAk+Fqu8ya18+yQVOEyEIx3Gxpsgegow33gcxfjK
EsUgJHXcpw7OPxRrCQIDAQAB
-----END PUBLIC KEY-----
'
Bloğumun yapısını PyYAML kullanarak korumak mümkün mü?
Aferin. Ekstra yeni satırın eklendiği yeri anlamaya çalışırken pyyaml kaynağından dolaşıyordum, bu yüzden umarım alt sınıfta kalacağım, ama yatmadan önce şans yoktu. – MattDMo
@MattDMo "Normal" damperin içindeki ekstra satır, dizenin yeni satırlar içerdiğinden. Dizeleri özel karakterler ve PyYAML seçimleriyle temsil etmenin birçok yolu vardır. Seçim, scalar'ın analizine dayanan emitter.choose_scaler_style() dosyasındadır, ancak gerçekte nasıl çalıştığını izlemek gerçekten zordur. Bunları okurken özel bir yazı yazarak ve düğüm stilini açıkça belirleyerek atlatıyorum. – Anthon
Sadece 'ruamel.yaml' kurdum ve onunla biraz oynuyorum: çok güzel. İki hızlı (konu dışı) soru: ad nereden geldi ve YAML 1.2'yi destekleme planlarınız var mı? Soruyorum çünkü çalışmak istediğim bazı dosyalar var: '% YAML 1.2' ilk satırı var. Spesifikasyonlar arasındaki farkların (1.2 spesifikasyonun 1. bölümünü okuduktan sonra bile) ya da dosyaların 1.2'deki herhangi bir yeni özellikten yararlanıp yararlanmadığı konusunda hiçbir fikrim yok. Bunlar temel olarak string veya boole değerleri olan metin tuşlarıdır. (nesne yok). İşte github bir: http://bit.ly/1JXLVbf – MattDMo