使用Python读取YAML文件会导致AttributeError
我正在尝试制作一个脚本来备份MySQL数据库。我有一个使用Python读取YAML文件会导致AttributeError,python,yaml,Python,Yaml,我正在尝试制作一个脚本来备份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.ym
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'
文件“conf.py”,第4行,在
打印(config.DB_名称)
AttributeError:'str'对象没有属性'DB_NAME'
有人知道我哪里出错了吗?试试这个:
import yaml
with open('config.yaml', 'r') as f:
doc = yaml.load(f)
要访问“DB_名称”,您可以使用:
txt = doc["DB_NAME"]
print txt
要备份数据库,您应该能够将其导出为
.sql
文件。如果您使用的是特定界面,请查找导出
然后,对于Python的yaml解析器
DB_HOST :'localhost'
DB_USER : 'root'
DB_USER_PASSWORD:'P@$$w0rd'
DB_NAME : 'moodle_data'
BACKUP_PATH : '/var/lib/mysql/moodle_data'
是一个键值
的东西(对不起,没有找到更好的词)。在某些语言中(如PHP),它们被转换为对象。不过,在python中,它们被转换为dicts(yaml解析器也这样做,JSON解析器也这样做)
因此,这是一个非常快速的dicts演示,但如果你开始(运行帮助(dict)
,和/或看一看,你不会后悔)
就你而言:
config['DB_NAME'] # moodle_data
有两个问题:
- 正如其他人所说,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'
它说TypeError:string索引必须是整数,而不是strMost可能做的:doc[0]['DB_NAME'],原因是。“JSON编译器”没有真正意义,因为解析JSON文档会生成数据结构,而不是程序。我想您指的是JSON解析器,更具体地说,是python的默认JSON解析器。坚持使用db备份是个好主意,顺便说一句。。。谢谢,修好了!import yaml config=yaml.load(open('config.yml'))db=config['db_NAME']print db still TypeError出现“字符串索引必须是整数,而不是str”欢迎访问。问题可能很简单,格式很好,所有有用的元素都在这里。祝您在这里过得愉快,当您的问题得到完全回答时,不要忘记将答案标记为已批准:)您不应该使用
yaml.load()
,因为它可能不安全,而且从您的问题来看,您似乎没有经验来正确判断您是否受到影响(改为使用.safeload()
)。如果读取config.yml
时抛出错误(在解析时),代码也会出现问题,在这种情况下,文件可能无法正确关闭。您应该使用with
语句
DB_HOST: 'localhost'
DB_USER: 'root'
DB_USER_PASSWORD: 'P@$$w0rd'
DB_NAME: 'moodle_data'
BACKUP_PATH: '/var/lib/mysql/moodle_data'