Python的Java属性文件解析器和写入器

jproperties的Python项目详细描述


jproperties是用于python的java属性文件解析器和编写器。它旨在提供相同的功能 作为Java’s Properties class,尽管 当前不支持XML属性格式。

1   Installation

您可以使用pip

pip install jproperties

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] = valueprop_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发行版。 其他一切都没有改变。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
HTTP标头的java InputStream未终止   java测试SpringWebListener   具有定义的替换编号Java的regex ReplaceAll   在java中使用contains()方法   java在选择查询中使用JoinColumn字段   具有用户的java Start-stop demon不是以给定用户启动   java glBufferData生成GL\u无效\u操作   java中循环代码的循环   Java位无符号移位(>>>>)会产生奇怪的结果   java HQL使用点分隔符从select获取结果   条纹、弹簧、玩耍(或?):使用哪种高性能Java框架?   广播接收机中的java停止服务   java回收器视图占据整个屏幕。不在上面显示我的UI元素   java使MySQL查询更快   java MappedByteBuffer查询   java递归算法问题