Python - ConfigParser 抛出注释
基于 ConfigParser 模块,我如何过滤并抛出 ini 文件中的每个注释?
import ConfigParser
config = ConfigParser.ConfigParser()
config.read("sample.cfg")
for section in config.sections():
print section
for option in config.options(section):
print option, "=", config.get(section, option)
例如。 在上面的基本脚本下面的 ini 文件中,打印出进一步的注释行,如下所示:
something = 128 ; comment line1
; further comments
; one more line comment
我需要的是其中只有节名称和纯键值对,没有任何注释。 ConfigParser 是否以某种方式处理这个问题,或者我应该使用正则表达式......或者? 干杯
Based on ConfigParser module how can I filter out and throw every comments from an ini file?
import ConfigParser
config = ConfigParser.ConfigParser()
config.read("sample.cfg")
for section in config.sections():
print section
for option in config.options(section):
print option, "=", config.get(section, option)
eg. in the ini file below the above basic script prints out the further comments lines as well like:
something = 128 ; comment line1
; further comments
; one more line comment
What I need is having only the section names and pure key-value pairs inside them without any comments. Does ConfigParser handles this somehow or should I use regexp...or? Cheers
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
根据以
;
或开头的 docs 行#
将被忽略。 您的格式似乎不满足该要求。 你能改变你的输入文件的格式吗?编辑:由于您无法修改输入文件,因此我建议使用类似的内容预先解析它们:
显然,如果选项中存在分号,您将必须更具创意。
according to docs lines starting with
;
or#
will be ignored. it doesn't seem like your format satisfies that requirement. can you by any chance change format of your input file?edit: since you cannot modify your input files, I'd suggest pre-parsing them with something along the lines:
obviously if semi-colon is present in options you'll have to be more creative.
最好的方法是编写一个无注释的
file
子类:然后您可以将它与 configparser (您的代码)一起使用:
Best way is to write a commentless
file
subclass:You could use it then with configparser (your code):
您的评论似乎不在以评论领导者开头的行中。 如果评论领导者是该行的第一个字符,那么它应该可以工作。
It seems your comments are not on lines that start with the comment leader. It should work if the comment leader is the first character on the line.
Python 3 附带了一个内置解决方案:类 configparser .RawConfigParser 具有构造函数参数
inline_comment_prefixes
。 例子:Python 3 comes with a build-in solution: The class configparser.RawConfigParser has constructor argument
inline_comment_prefixes
. Example:正如文档所说:“(为了向后兼容,只有 ; 启动内联注释,而 # 则不然。)”所以使用“;” 而不是“#”作为内嵌注释。 它对我来说效果很好。
As the doc said: "(For backwards compatibility, only ; starts an inline comment, while # does not.)" So use ";" and not "#" for inline comments. It is working well for me.