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第三方库


热门话题
java如何按专辑中曲目的数量过滤这些歌曲   JavaSWT:如何从动作创建普通按钮   java如何使用具有此特定公式的未排序数组实现二叉搜索树?   java PDFBox 2.0.4:提取图像时内存使用率高   java无法实例化类型集   JavaSpring服务周期性任务   java如何在用户打开活动时发出网络请求,但前提是自上次请求已过24小时?   c#如何从Hibernate/NHibernate中的值对象引用实体?   在命令行上运行java时,显示sql server错误消息“java.lang.ClassNotFoundException:com.microsoft.sqlserver.jdbc.SQLServerDriver”   java数据提供者和断言   java模运算符未给出正确的结果   如何将Eclipse java项目部署到jar文件中   java动态规划问题“以输入价格购买玩家后,总评分必须最高”   java我必须为数组的每个元素制作getter setter吗?   未调用java JUnit RunListener   java如何计算加入多播socket的客户端?