【问题标题】:Manipulating a file with nested tags and key-value pairs使用嵌套标签和键值对操作文件
【发布时间】:2017-12-30 03:05:07
【问题描述】:

我需要使用使用等号的键值对的嵌套 HTML 样式标记的配置文件。

我想要一种 Python 方法,它允许我读取此类文件、添加、删除或修改部分,以及编写更新的文件。

文件看起来像:

<tag1>
key1=value1
key2=value2

<tag2>
key3=value3
</tag2>

<tag2>
key3=value four

</tag2>

</tag1>

所以它不是一个 HTML 或 XML 文件,也不是一个 Windows INI 文件。等号周围没有空格,文件中有一些似乎被忽略的随机空行,键值对中的值不使用引号并且可能嵌入了空格。

我找不到这个确切文件结构的定义或名称,但我发现很难集中搜索,所以我可能遗漏了一些明显的东西。

这是公认的标准文件结构吗?如果有,它叫什么?

我很感激任何关于可以强制哪些库使用此结构的指针,如果在 docco 中没有现成的可用示例,我可能会提供一些示例。

谢谢。

【问题讨论】:

  • 你期望的输出格式是什么
  • 格式就是普通的xml。可以使用简单的字符串操作(即splitlines()partition('='))来解析每个标签的文本内容。
  • @Shiva:谢谢!输出格式与输入相同。我应该澄清一下,我正在处理的文件是第三方应用程序使用的一个非常大(5k - 10k 行)的文件,我想系统地添加、删除一个更改元素。
  • @ekhumoro:谢谢!我没有想到使用 XML 解析器,然后将 key=value 对作为文本使用。很明显,现在你指出来了。我试试看。

标签: python file parsing text


【解决方案1】:

为了保存配置文件,你可以使用python中的configparser模块。这使得在您的应用中读取配置信息变得非常容易。

对于这样的配置文件:-

[installation]
library=%(prefix)s/lib
include=%(prefix)s/include
bin=%(prefix)s/bin
prefix=/usr/local

[debug]
log_errors=true
show_warnings=False

[server]
port: 8080
nworkers: 32
pid-file=/tmp/spam.pid
root=/www/root

你可以像下面这样读取这个配置文件:

from configparser import ConfigParser
cfg = ConfigParser()

cfg.read('config.ini')
['config.ini']

cfg.sections()
['installation', 'debug', 'server']

cfg.get('installation','library')

'/usr/local/lib'

cfg.getboolean('debug','log_errors')
True

cfg.getint('server','port')
8080

cfg.getint('server','nworkers')
32

print(cfg.get('server','signature'))

如果您只想使用那种 html 配置,请查看 xml.etree 模块。它提供了广泛的功能。

【讨论】:

  • 谢谢!文件格式是我坚持的东西 - 我正在操作第三方应用程序使用的配置/数据库文件,而不是向我控制的程序添加配置存储。 xml.etree 看起来像我需要的,特别是考虑到上面@ekhumoro 的观察......
  • 如果答案有帮助,请点赞并打勾:)
猜你喜欢
  • 2014-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-29
相关资源
最近更新 更多