PythonでYAMLファイルを解析するにはどうすればよいですか?
10 に答える
C ヘッダーに依存しない最も簡単で純粋な方法は、次の方法でインストールできるPyYaml (ドキュメントpip install pyyaml
)です。
#!/usr/bin/env python
import yaml
with open("example.yaml", "r") as stream:
try:
print(yaml.safe_load(stream))
except yaml.YAMLError as exc:
print(exc)
以上です。単純なyaml.load()
関数も存在しyaml.safe_load()
ますが、任意のコードが実行される可能性を回避するために提供される任意のオブジェクトのシリアル化/逆シリアル化が明示的に必要でない限り、常に優先する必要があります。
PyYaml プロジェクトは、YAML 1.1 仕様までのバージョンをサポートしていることに注意してください。YAML 1.2 仕様のサポートが必要な場合は、この回答に記載されているruamel.yamlを参照してください。
また、pyyaml の代わりにドロップインを使用することもできます。これは、yaml ファイルを以前と同じ順序で並べたままにするoyamlと呼ばれます。ここで oyaml の sync を表示
YAML 1.2 仕様(2009 年リリース) に準拠する YAML がある場合は、 ruamel.yamlを使用する必要があります(免責事項: 私はそのパッケージの作成者です)。これは基本的に PyYAML のスーパーセットであり、YAML 1.1 (2005 年以降) のほとんどをサポートしています。
ラウンドトリップ時にコメントを保持できるようにしたい場合は、必ず ruamel.yaml を使用する必要があります。
@Jon の例のアップグレードは簡単です。
import ruamel.yaml as yaml
with open("example.yaml") as stream:
try:
print(yaml.safe_load(stream))
except yaml.YAMLError as exc:
print(exc)
safe_load()
入力を本当に完全に制御できず、それが必要であり (めったにありません)、自分が何をしているのかを理解している場合を除き、使用してください。
ファイルの操作にpathlibPath
を使用している場合は、ruamel.yaml が提供する新しい API を使用することをお勧めします。
from ruamel.yaml import YAML
from pathlib import Path
path = Path('example.yaml')
yaml = YAML(typ='safe')
data = yaml.load(path)