2017-10-20 30 views
1

私は以下のコードを提供しました。変数にインデックス全体をロードするためのより良い、より簡潔な、方法がある場合、私はちょうどYAML変数を自動的にインポートしますか?

Pythonコード...手動で各1を指定するのではなく、

script_dir = os.path.dirname(__file__) 
file_path = os.path.join(script_dir, 'config.yaml') 

with open(file_path, 'r') as stream: 
    index = 'two' 
    load = yaml.load(stream) 
    USER = load[index]['USER'] 
    PASS = load[index]['PASS'] 
    HOST = load[index]['HOST'] 
    PORT = load[index]['PORT'] 
    ... 

YAMLコンフィグを思ったんだけど

one: 
    USER: "john" 
    PASS: "qwerty" 
    HOST: "127.0.0.1" 
    PORT: "20" 
two: 
    USER: "jane" 
    PASS: "qwerty" 
    HOST: "196.162.0.1" 
    PORT: "80" 
+1

の可能性のある重複[PythonでYAMLファイルを解析し、データへのアクセス?](https://stackoverflow.com/questions/8127686/parsing-a-yaml-file-in-python-and-データへのアクセス) –

+0

https://pyyaml.org/wiki/PyYAMLDocumentation – thatrockbottomprogrammer

+0

を使用してくださいこれは私のコードをどのように設定しているかの例です。言い換えれば、私はすべての変数を自動的にインポートするようにします。 –

答えて

0

globals()にASSING:

import yaml 
import os 

script_dir = os.path.dirname(__file__) 
file_path = os.path.join(script_dir, 'config.yaml') 

index = 'two' 

with open(file_path, 'r') as stream: 
    load = yaml.safe_load(stream) 

for key in load[index]: 
    globals()[str(key)] = load[index][key] 

print(USER) 
print(PORT) 

これは与える:

jane 
80 

いくつかの注意事項:グローバル変数を使用して

  • は、多くの場合、
  • コメントに a pで述べたように
  • が、これは例えば問題を引き起こす可能性が悪い習慣と考えられています組み込みの影を含むキーを使用
  • PyYAMLを使用する必要がある場合は、safe_load()を使用する必要があります。
  • あなたはruamel.yaml(免責事項:私はそのパッケージの作者午前)の使用を検討する必要があります(安全である)load = yaml.load(stream)を使用して再び

    import ruamel.yaml 
    yaml = ruamel.yaml.YAML(typ='safe') 
    

    とあなたと同じ結果を得ることができ、。

+1

これは潜在的に問題があることに注意してください。組み込み関数やTrueやFalseのようなものをシャドーするからです。 –

+0

あなたの回答は役に立ちました!あなたのパッケージもチェックアウトします。応答ありがとう:) –

関連する問題