在Python中解析.properties文件
如果解析一个简单的 Java,ConfigParser
模块会引发异常-style .properties
文件,其内容是键值对(即没有 INI 样式的节标题)。有一些解决方法吗?
The ConfigParser
module raises an exception if one parses a simple Java-style .properties
file, whose content is key-value pairs (i..e without INI-style section headers). Is there some workaround?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(10)
我认为 MestreLion 的“read_string”评论很好,很简单,值得例子。
对于 Python 3.2+,您可以像这样实现“虚拟部分”的想法:
I thought MestreLion's "read_string" comment was nice and simple and deserved an example.
For Python 3.2+, you can implement the "dummy section" idea like this:
假设您有,例如:
ie 将是
.config
格式,只不过它缺少前导部分名称。然后,很容易伪造节标题:用法:
输出:
Say you have, e.g.:
i.e. would be a
.config
format except that it's missing a leading section name. Then, it easy to fake the section header:usage:
output:
我的解决方案是使用 StringIO 并在前面添加一个简单的虚拟标头:
My solution is to use
StringIO
and prepend a simple dummy header:Alex Martelli 的上述答案不适用于 Python 3.2+:
readfp()
已被read_file()
取代,现在它需要一个迭代器而不是使用readline() 方法。
下面是使用相同方法的代码片段,但适用于 Python 3.2+。
Alex Martelli's answer above does not work for Python 3.2+:
readfp()
has been replaced byread_file()
, and it now takes an iterator instead of using thereadline()
method.Here's a snippet that uses the same approach, but works in Python 3.2+.
归功于 如何创建包含文本文件中的键值对的字典
如果值中存在等号(例如
someUrl= https://some.site.com/endpoint?id=some-value&someotherkey=value
)Credit to How to create a dictionary that contains key‐value pairs from a text file
maxsplit=1
is important if there are equal signs in the value (e.g.someUrl=https://some.site.com/endpoint?id=some-value&someotherkey=value
)耶!另一个版本
基于这个答案(添加是使用
dict
,和< /code> 语句,并支持
%
字符)使用
我的示例中使用的
.properties
文件编辑 2015-11-06
感谢 Neill Lima 提到
%
字符存在问题。原因是
ConfigParser
旨在解析.ini
文件。%
字符是一种特殊语法。为了使用%
字符,只需根据.ini
语法添加一个%
替换为%%
。YAY! another version
Based on this answer (the addition is using a
dict
,with
statement, and supporting the%
character)Usage
the
.properties
file used in my exampleEdit 2015-11-06
Thanks to Neill Lima mentioning there was an issue with the
%
character.The reason for that is
ConfigParser
designed to parse.ini
files. The%
character is a special syntax. in order to use the%
character simply added a a replace for%
with%%
according to.ini
syntax.这个答案建议在Python 3中使用itertools.chain。
This answer suggests using itertools.chain in Python 3.
现在 config.get('dummy_section', option) 将从 DEFAULT 部分返回 'option'。
或者:
在这种情况下,
config.get('properties', option)
不会诉诸默认部分。Now
config.get('dummy_section', option)
will return 'option' from the DEFAULT section.or:
In which case
config.get('properties', option)
doesn't resort to the default section.python2.7 的另一个答案基于 Alex Martelli 的答案
Yet another answer for python2.7 based on Alex Martelli's answer