我想在python中解析格式为
的结构化文本文件[filter name_of_filter]
field1 = xxx, xxx
field2 = 23
文本文件可能包含具有不同字段数的其他标头。对我来说,结构类似于Windows ini文件。我希望以与ConfigParser提供访问权限相同的方式访问数据,即能够列出部分,然后对于给定部分,查看字段及其对应值是什么。目的是读取文件,修改它的位并以相同的格式将其写回。
import ConfigParser as cp
config = cp.ConfigParser()
config.read('test')
print config.sections()
输出
[]
我出错的地方是没有名为“测试”的文件。存在,我的跛脚错误。
在发布之前,我尝试过ConfigParser(因为我之前使用过很久以前的.ini文件),但是我无法使用它。谷歌和SO引领我走向pyparser,但这更像是在解释句子而我无法弄清楚如何为多行构建模板。我正在寻找像ConfigParser这样的东西,以及它如何处理.ini文件或BeautifulSoup对html / xml文件或lxml对xml文档等的处理。
不幸的是,我不知道这个编程/数据处理的分支是什么,也不知道用于为自己识别解决方案的正确关键字。在我的沮丧中,我在这里发了一个问题。
任何这些都是可以接受的:
这类问题属于哪种编程或数据处理分支?如果您有一些数据,则定义模板或自动定义模板,然后应用它以结构化方式访问数据。
谢谢!
答案 0 :(得分:4)
您当然可以使用ConfigParser处理您的示例:
>>> txt='''\
... [filter name_of_filter]
... field1 = xxx, xxx
... field2 = 23'''
>>> import io
>>> import ConfigParser
>>> config = ConfigParser.RawConfigParser(allow_no_value=True)
>>> config.readfp(io.BytesIO(txt))
>>> config.items("filter name_of_filter")
[('field1', 'xxx, xxx'), ('field2', '23')]
使用文件:
config = ConfigParser.RawConfigParser(allow_no_value=True)
with open(fn) as fin:
config.readfp(fin)
for section in config.sections():
print '"{}":\t{}'.format(section, config.items(section))
# "filter name_of_filter": [('field1', 'xxx, xxx'), ('field2', '23')]
如果您希望函数喜欢 configparser而不使用使用 configparser,我想从source of configparser开始作为参考。具体来说,您可以look at the regexes used。