PythonでYAMLファイルを解析する方法
3991 ワード
PythonでYAMLファイルを解析するにはどうすればいいですか?
1階
Cヘッダーに依存しない最も簡単で、最も純粋な方法はPyYaml(ドキュメント):
そうです.通常の
PyYamlプロジェクトはYAML 1.1仕様以前のバージョンをサポートしていることに注意してください.YAML 1.2仕様のサポートが必要な場合はruamelを参照してください.yaml、この答えに記載されています.
2階
YAML 1.2仕様(2009年リリース)に準拠するYAMLがある場合は、ruamel.yaml(免責声明:このパッケージの作成者)を使用します.本質的にはPyYAMLのスーパーセットであり、多くのYAML 1.1(2005年から)をサポートしています.
往復時にコメントを保持する場合はruamelを使用する必要があります.yaml.
アップグレード@Jonの例は簡単です.
pathlib
#3階
Python 2+3(およびUnicode)を使用してYAMLファイルを読み書きする
作成されたYAMLファイル
汎用ファイルの末尾 CSV:超単純フォーマット(読み書き) JSON:人間が読めるデータを書くのに非常に適しています.よく使われる(読み書き) YAML:YAMLはJSONのスーパーセットですが、読みやすい(読み書き、JSONとYAMLの比較) pickle:Pythonシーケンス化フォーマット(読み書き) MessagePack(Pythonパッケージ):よりコンパクトな表示形式(読み取りと書き込み) HDF 5(Pythonパッケージ):マトリクス(読み書き) に適用 XML:存在が多すぎる*嘆*(読み取りと書き込み) アプリケーションでは、次のことが重要です.その他のプログラミング言語のサポート 読書/作文表現 コンパクト度(ファイルサイズ) 関連項目:データ・シーケンス化フォーマットの比較
プロファイルを作成する方法を探している場合は、私の短文「Pythonのプロファイル」を読む必要があります.
#4階
#5階
yamlモジュールをインポートし、「my_dict」という辞書にファイルをロードします.
これが必要です.これで、yamlファイル全体が「my_dict」辞書に表示されます.
#6階
私はruamelを使います.yaml . 詳細と議論はここにあります.
ruamel.yamlの使い方はPyYAMLの古い使い方と互換性があり(いくつかの簡単な解決可能な問題があります)、私が提供したリンクで述べたように、
に代わる
ほとんどの問題を解決します.
編集:PyYAMLは死んでいないことが証明され、別の場所に保存されているだけです.
#7階
例:
defaults.yaml
環境
1階
Cヘッダーに依存しない最も簡単で、最も純粋な方法は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、この答えに記載されています.
2階
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()
を使用して、本当に入力を完全に制御しない限り、入力する必要があります(このような状況はめったにありません)、何をしているかを知っています.pathlib
Path
を使用してファイルを処理する場合は、新しいruamelを使用することが望ましい.yaml API: from ruamel.yaml import YAML
from pathlib import Path
path = Path('example.yaml')
yaml = YAML(typ='safe')
data = yaml.load(path)
#3階
Python 2+3(およびUnicode)を使用してYAMLファイルを読み書きする
# -*- coding: utf-8 -*-
import yaml
import io
# Define data
data = {
'a list': [
1,
42,
3.141,
1337,
'help',
u'€'
],
'a string': 'bla',
'another dict': {
'foo': 'bar',
'key': 'value',
'the answer': 42
}
}
# Write YAML file
with io.open('data.yaml', 'w', encoding='utf8') as outfile:
yaml.dump(data, outfile, default_flow_style=False, allow_unicode=True)
# Read YAML file
with open("data.yaml", 'r') as stream:
data_loaded = yaml.safe_load(stream)
print(data == data_loaded)
作成されたYAMLファイル
a list:
- 1
- 42
- 3.141
- 1337
- help
- €
a string: bla
another dict:
foo: bar
key: value
the answer: 42
汎用ファイルの末尾
.yml
および.yaml
せんたく案プロファイルを作成する方法を探している場合は、私の短文「Pythonのプロファイル」を読む必要があります.
#4階
#!/usr/bin/env python
import sys
import yaml
def main(argv):
with open(argv[0]) as stream:
try:
#print(yaml.load(stream))
return 0
except yaml.YAMLError as exc:
print(exc)
return 1
if __name__ == "__main__":
sys.exit(main(sys.argv[1:]))
#5階
yamlモジュールをインポートし、「my_dict」という辞書にファイルをロードします.
import yaml
my_dict = yaml.load(open('filename'))
これが必要です.これで、yamlファイル全体が「my_dict」辞書に表示されます.
#6階
私はruamelを使います.yaml . 詳細と議論はここにあります.
from ruamel import yaml
with open(filename, 'r') as fp:
read_data = yaml.load(fp)
ruamel.yamlの使い方はPyYAMLの古い使い方と互換性があり(いくつかの簡単な解決可能な問題があります)、私が提供したリンクで述べたように、
from ruamel import yaml
に代わる
import yaml
ほとんどの問題を解決します.
編集:PyYAMLは死んでいないことが証明され、別の場所に保存されているだけです.
#7階
例:
defaults.yaml
url: https://www.google.com
環境
from ruamel import yaml
data = yaml.safe_load(open('defaults.yaml'))
data['url']