Python的Java属性文件解析器和写入器
jproperties的Python项目详细描述
jproperties是用于python的java属性文件解析器和编写器。它旨在提供相同的功能 作为Java’s Properties class,尽管 当前不支持XML属性格式。
目录
2 Overview
类型为Properties的对象可以像python字典一样使用(但请参见下面的Caveats)。 方法load()通过解析Java属性文件格式的输入来填充对象;方法store() 方法将对象中存储的键值对以相同格式写入流。
load()和store()方法都接受一个encoding参数。默认设置为 iso-8859-1,但它可以设置为python支持的任何编码,包括广泛使用的 utf-8。
2.1 Parsing a property file
fromjpropertiesimportPropertiesp=Properties()withopen("foobar.properties","rb")asf:p.load(f,"utf-8")
就这样,p现在可以像包含foobar.properties属性的字典一样使用。
2.2 Writing a property file
fromjpropertiesimportPropertiesp=Properties()p["foobar"]="A very important message from our sponsors: Python is great!"withopen("foobar.properties","wb")asf:p.store(f,encoding="utf-8")
2.3 Reading from and writing to the same file-like object
fromjpropertiesimportPropertieswithopen("foobar.properties","r+b")asf:p=Properties()p.load(f,"utf-8")# Do stuff with the p object...f.truncate(0)p.store(f,encoding="utf-8")
3 Special features
3.1 Metadata
属性文件解析器支持在属性文件中包含可编程读取和可设置的元数据。 键的元数据表示为python字典;该字典的键和值应该是字符串, 尽管写入属性文件时,所有非字符串对象都将转换为字符串。这是 单向转换;在load()期间再次读取元数据时,将处理所有键和值 简单的字符串。
默认情况下,store()方法不会写出元数据。要启用该功能,请设置关键字参数 strip_meta=False调用方法时。
请注意,始终启用元数据支持。唯一可选的是实际写出元数据。
以两个下划线(__)开头的元数据键不会由store()方法写入输出流。 因此,它们可以用于将“仅运行时”元数据附加到属性。但是,目前具有此类键的元数据是 仍由load()从输入流读取;这可能被视为错误行为。
3.1.1 Caveats
元数据支持影响Properties对象如何用作字典对象:
- 要设置键的值,请执行prop_object[key] = value或prop_object[key] = value, metadata。第一种形式 将保持密钥的元数据不变。还可以使用setmeta()方法设置密钥的元数据。
- 要获取键的值,请执行value, metadata = prop_object[key]。如果没有密钥的元数据, metadata将是一个空字典。若要仅检索键的元数据,getmeta()方法可以 被利用。
- 当用作迭代器时,Propertiesobjects将以未指定的顺序返回所有键。没有元数据是 返回(但可以使用getmeta()检索)。
3.2 Setting defaults
保存键值对的内部字典可以使用properties属性访问。删除那个 属性从对象中删除所有键值对。
但是,使用此特殊属性修改属性不会以任何方式修改元数据。也就是说 通过执行del prop_obj.properties[key]删除属性不会从对象中删除关联的元数据。 相反,请执行del prop_obj[key]。
尽管如此,properties属性对于在分析属性文件之前设置许多默认值还是很有用的:
fromjpropertiesimportPropertiesprop_obj=Properties()prop_obj.properties=a_big_dictionary_with_defaultsfile_obj=codecs.open("foobar.properties","rb","iso-8859-1")prop_obj.load(file_obj,encoding=None)
4 Version history
4.1 Version 2.0.0
- python 3支持!感谢@tboz203,他做了很多工作。(1)
- 放弃对Python2.6的支持。
4.2 Version 1.0.1
- 这是第一个“适当的”pypi版本,具有适当的pypi元数据和适当的pypi发行版。 其他一切都没有改变。
4.3 Version 1.0
- 初始版本