【问题标题】:Nicely parsing a multiline config file in python在 python 中很好地解析多行配置文件
【发布时间】:2016-03-03 17:13:23
【问题描述】:

我需要一个配置文件来生成我的脚本。

[PATHS]
elements = elementA,elementB,elementC,elementD,elementE,elementF,elementG,elementH,elementJ,elementK

正如您在某个点之后注意到的那样,这条线变得太长了。我无法跟踪其中写入的元素,而且看起来一点也不好看。

在我的脚本中,我执行以下操作来阅读elements

elements = config["PATHS"]["elements"].split(",")

有没有更好的方法来处理这个问题?我更喜欢包含换行符和制表符的东西,例如:

[PATHS]
elements = 
    - elementA
    - elementB
    - elementC
    - elementD
    - elementE
    - elementF
    - elementG
    - elementH
    - elementJ
    - elementK

也欢迎有经验的人提出任何建议。

我尝试与.split("\n\t\t- ") 拆分但没有成功


print("1",config["PATHS"]["elements"])

1 
- elementA
- elementB
- elementC


print("2",config["PATHS"]["elements"].strip())
2 - elementA
- elementB
- elementC


print("3",config["PATHS"]["elements"].strip().split('\n'))
3 ['- elementA', '- elementB', '- elementC']

【问题讨论】:

  • 变量的类型是什么:config?
  • config type: <class 'configparser.ConfigParser'>;如果你要求elements 它应该是一个字符串列表
  • - 对您来说很重要吗?元素可以各占一行吗?
  • 不重要,只是为了提高可读性。元素可以在自己的行中,有一点缩进

标签: python parsing python-3.x configuration-files configparser


【解决方案1】:

这可能会做你想做的事:

elements = [
    element.strip(' -')
    for element in config["PATHS"]["elements"].strip().split('\n')]

【讨论】:

  • 似乎可以胜任!只是出于好奇,首先应用strip()split() 中的哪一个?想知道内部发生了什么......
  • strip() 删除默认空格,split('\n') 在看到\n 时创建一个分隔元素的列表,strip(' -') 从每个元素中删除`-`
  • 我一直偏爱s.splitlines()s.split('\n')splitlines 是 OS-line-ending 感知的,而且我只是发现 no-arg 函数调用更简洁。
猜你喜欢
  • 2018-07-03
  • 2021-04-17
  • 1970-01-01
  • 2015-08-03
  • 1970-01-01
  • 1970-01-01
  • 2012-08-31
  • 2011-10-29
  • 2013-08-06
相关资源
最近更新 更多