Как читать из файла yaml в Python
Я новичок в Python. Я пытаюсь сделать скрипт для резервного копирования базы данных 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'
Теперь мне нужно прочитать этот файл.
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'
кто-нибудь знает, где я допустил ошибку?
3 ответов
есть 2 вопроса:
- как говорили другие, ямл.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'
для резервного копирования базы данных, вы должны иметь возможность экспортировать его как . Если вы используете определенный интерфейс, найдите Export
.
затем, для парсера yaml Python.
DB_HOST :'localhost'
DB_USER : 'root'
DB_USER_PASSWORD:'P@$$w0rd'
DB_NAME : 'moodle_data'
BACKUP_PATH : '/var/lib/mysql/moodle_data'
это key-value
вещь (извините, не нашел лучшего слова для этого один). В определенном языке (например PHP, я думаю), они преобразуются в объекты. Однако в python они преобразуются в словарь (парсер 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
Итак, это действительно быстрая презентация диктов, но это должно заставить вас идти (run help(dict)
, и/или посмотреть здесь вы не пожалеете)
в вашем случае:
config['DB_NAME'] # moodle_data
попробуйте это:
import yaml
with open('config.yaml', 'r') as f:
doc = yaml.load(f)
для доступа к "DB_NAME"вы можете использовать:
txt = doc["DB_NAME"]
print txt