web-dev-qa-db-ja.com

PythonでYAMLファイルを読み取ると、AttributeErrorが発生します

MySQLデータベースをバックアップするスクリプトを作成しようとしています。 config.ymlファイル:

DB_Host :'localhost'
DB_USER : 'root'
DB_USER_PASSWORD:'P@$$w0rd'
DB_NAME : 'moodle_data'
BACKUP_PATH : '/var/lib/mysql/moodle_data'

次に、このファイルを読む必要があります。私のPythonこれまでのコード:

import yaml
config = yaml.load(open('config.yml'))
print(config.DB_NAME)

そして、ここに現れるエラーがあります:

file "conf.py", line 4, in <module>
print(config.DB_NAME)
AttributeError: 'str' object has no attribute 'DB_NAME'

誰かが私が間違った場所を知っていますか?

11

2つの問題があります。

  • 他の人が言ったように、yaml.load()は連想配列をマッピングとしてロードするため、config['DB_NAME']
  • 設定ファイルの構文が正しくありません。YAMLでは、キーはコロン+スペースで値と区切られています。

ファイルが次のようにフォーマットされている場合は機能するはずです。

DB_Host: 'localhost'
DB_USER: 'root'
DB_USER_PASSWORD: 'P@$$w0rd'
DB_NAME: 'moodle_data'
BACKUP_PATH: '/var/lib/mysql/moodle_data'
11
Roel Schroeven

データベースをバックアップするには、_.sql_ファイルとしてエクスポートできるはずです。特定のインターフェイスを使用している場合は、Exportを探します。

次に、Pythonのyamlパーサーの場合。

_DB_Host :'localhost'
DB_USER : 'root'
DB_USER_PASSWORD:'P@$$w0rd'
DB_NAME : 'moodle_data'
BACKUP_PATH : '/var/lib/mysql/moodle_data'
_

は_key-value_のことです(申し訳ありませんが、そのためのより良いWordは見つかりませんでした)。特定の言語(PHPと思う)では、オブジェクトはobjectsに変換されます。pythonけれども、それらはdictsに変換されます(yamlパーサーはJSONパーサーも行います)。

_# access an object's attribute
my_obj.attribute = 'something cool'
my_obj.attribute # something cool
del my_obj.attribute
my_obj.attribute # error

# access a dict's key's value
my_dict = {}
my_dict['hello'] = 'world!'
my_dict['hello'] # world!
del my_dict['hello']
my_dict['hello'] # error
_

だから、それは辞書の非常に簡単なプレゼンテーションですが、それであなたが行く必要があります(help(dict)を実行し、そして/または見てください ここ あなたはそれを後悔しません)

あなたの場合:

_config['DB_NAME'] # moodle_data
_
2
math2001

これを試して:

import yaml
with open('config.yaml', 'r') as f:
    doc = yaml.load(f)

「DB_NAME」にアクセスするには、次を使用できます。

txt = doc["DB_NAME"]
print txt
0
Shivkumar kondi