当前位置:  开发笔记 > 编程语言 > 正文

配置文件,包含python中的键值对列表

如何解决《配置文件,包含python中的键值对列表》经验,为你挑选了3个好方法。

我有一个python脚本,它分析一组错误消息,并检查每条消息是否与特定模式(正则表达式)匹配,以便对这些消息进行分组.例如,"文件x不存在"和"文件y不存在"将匹配"文件.*不存在"并且被视为"未找到文件"类别的两次出现.

随着模式和类别的数量不断增加,我想把这些夫妇"正则表达/显示字符串"放在配置文件中,基本上是某种类型的字典序列化.

我希望这个文件可以手工编辑,所以我放弃任何形式的二进制序列化,而且我宁愿不采用xml序列化来避免字符转义问题(&<>等等...... ).

你知道什么是实现这个目标的好方法吗?

更新:感谢Daren Thomas和Federico Ramponi,但我不能拥有可能任意代码的外部python文件.



1> Daren Thomas..:

我有时只是编写一个调用的python模块(即文件)config.py或具有以下内容的东西:

config = {
    'name': 'hello',
    'see?': 'world'
}

然后可以像这样"读取":

from config import config
config['name']
config['see?']

简单.


@Federico:非常类似于你的例子:for pattern,msg in config.patterns:if re.search(pattern,string):print msg

2> Aaron Hays..:

你有两个不错的选择:

    使用ConfigParser的 Python标准配置文件格式

    YAML使用像PyYAML这样的库

标准Python配置文件看起来像带有[sections]key : valuekey = value成对的INI文件.这种格式的优点是:

不需要第三方库

简单,熟悉的文件格式.

YAML的不同之处在于它被设计为人性化的数据序列化格式,而不是专门为配置而设计的.它非常易读,并为您提供了几种表示相同数据的方法.对于您的问题,您可以创建一个如下所示的YAML文件:

file .* does not exist : file not found
user .* not found : authorization error

或者像这样:

{ file .* does not exist: file not found,
  user .* not found: authorization error }

使用PyYAML不是更简单:

import yaml

errors = yaml.load(open('my.yaml'))

此时errors是一个具有预期格式的Python字典.YAML能够代表字典以外的代码:如果您更喜欢字对列表,请使用以下格式:

-
  - file .* does not exist 
  - file not found
-
  - user .* not found
  - authorization error

要么

[ [file .* does not exist, file not found],
  [user .* not found, authorization error]]

这将在yaml.load调用时生成列表列表.

YAML的一个优点是,您可以使用它将现有的硬编码数据导出到文件以创建初始版本,而不是剪切/粘贴加上一堆查找/替换以将数据转换为正确的格式.

YAML格式需要花费更多时间来熟悉,但使用PyYAML比使用ConfigParser更简单,其优点是您可以使用YAML获得有关数据表示方式的更多选项.

任何一个听起来都能满足您当前的需求,ConfigParser将更容易开始,而YAML将来会为您提供更多的灵活性,如果您的需求扩大.

祝你好运!


JSON作为配置文件的表示法有什么问题?
JSON也应该工作,我只是更熟悉YAML.当然,2.6有新的json模块,方便.
@ S.Lott如果您使用JSON作为配置文件,请尽情享受任何评论!

3> sheats..:

我听说ConfigObj比ConfigParser更容易使用.它被很多大项目使用,IPython,Trac,Turbogears等......

从他们的介绍:

ConfigObj是一个简单但功能强大的配置文件读写器:一个ini文件round tripper.它的主要特点是它非常易于使用,具有简单的程序员界面和简单的配置文件语法.它有很多其他功能:

嵌套部分(子部分),任何级别

列出值

多行值

字符串插值(替换)

与强大的验证系统集成

包括自动类型检查/转换

重复的部分

并允许默认值

在写出配置文件时,ConfigObj会保留所有注释以及成员和部分的顺序

使用配置文件的许多有用方法和选项(如'reload'方法)

完整的Unicode支持

推荐阅读
家具销售_903
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有