Skip to main content

Parser for Java .properties files.

Supports Python 2.6, 2.7, and 3.3+

Installation

Use pip to install jprops from PyPI:

pip install jprops

Usage

Reading properties

Use jprops.load_properties to read a properties file and return a normal Python dict:

import jprops
with open('mine.properties') as fp:
  properties = jprops.load_properties(fp)

You can provide a custom “mapping” to load the properties into a different data strucuture. For example, if you would like to keep the properties in the same order they originally appeared, you can use an “ordered dict”, such as collections.OrderedDict. The “mapping” can be any type or function that accepts an iterable of (key, value) pairs:

import collections
with open('mine.properties') as fp:
  properties = jprops.load_properties(fp, collections.OrderedDict)

load_properties is just a wrapper to iter_properties, which you can use directly if you want to process the properties lazily without loading them all into a data structure:

with open('mine.properties') as fp:
  for key, value in jprops.iter_properties(fp):
    if key.startswith('foo'):
      print key, value

Writing properties

Use jprops.store_properties to write a dict, dict-like object, or any iterable of (key, value) pairs to a file:

x = {'y': '1', 'z': '2'}
with open('out.properties', 'w') as fp:
  jprops.store_properties(fp, x)

By default jprops follows the Java convention of writing a timestamp comment to the beginning of the file, like:

#Thu Oct 06 19:08:50 EDT 2011
y=1
z=2

You can suppress writing the timestamp comment by passing timestamp=False.

You can provide a custom header comment that appears before the timestamp. Multi-line comments are handled appropriately, continuing the comment across lines:

jprops.store_properties(fp, {'x': '1'}, comment='Hello\nworld!')
#Hello
#world!
#Thu Oct 06 19:17:21 EDT 2011
x=1

You can also use write_comment and write_property for finer-grained control over writing a properties file:

with open('out.properties', 'w') as fp:
  jprops.write_comment(fp, 'the hostname:')
  jprops.write_property(fp, 'host', 'localhost')
  jprops.write_comment(fp, 'the port number:')
  jprops.write_property(fp, 'port', '443')
#the hostname:
host=localhost
#the port number:
port=443

Comments

By default, comments in the input will be ignored, but they can be included by iter_properties by passing comments=True. The comments will be included with jprops.COMMENT as a sentinal value in place of the key:

with open('in.properties') as fp:
  props = list(jprops.iter_properties(fp, comments=True))
for k, v in props:
  if k is jprops.COMMENT:
    print 'comment:', v

jprops doesn’t include any special data structures for preserving comments, but you can manipulate the properties before writing them back out. For example this is one simple pattern for altering properties while writing the ouput:

updates = {'one': '1', 'two': '2', 'to_remove': None}

with open('out.properties', 'w') as fp:
  for key, value in props:
    # updates.pop will return and remove the value for the key, or return
    # the original `value` if it doesn't exist
    value = updates.pop(key, value)
    # skip keys set to `None` in `updates`
    if value is not None:
      # write_property handles jprops.COMMENT as the key so you don't have to
      # check whether to use write_comment
      jprops.write_property(fp, key, value)
  # since the existing keys have already been popped, use store_properties
  # to write the remaining updates
  jprops.store_properties(fp, updates, timestamp=False)

File encodings and Unicode

Files opened in binary mode such as open(filename, 'rb') or open(filename, 'wb') will use the latin-1 encoding and escape unicode characters in the format \uffff for compatibility with the Java Properties byte stream encoding.

Starting with version 2.0, files opened with other text encodings are also supported:

with io.open('sample.properties', encoding='utf-8') as fp:
  props = jprops.load_properties(fp)

This works with the built-in open function, codecs.open, or io.open. Other file-like objects that extend io.TextIOBase or have a non-empty encoding property will be read or written as unicode text values, otherwise they will be considered binary and read or written as latin-1 encoded bytes.

Authors

Matt Good (matt@matt-good.net)

Changes

2.0.2 (2017-04-21)

  • Bump version in setup.py before release

2.0.1 (unreleased)

  • Fix over-escaping in values

2.0 (2017-04-08)

  • Support files opened with text encodings

  • Nice repr for jprops.COMMENT

1.0 (2013-06-12)

  • Python 3.3 support

  • More informative error when trying to write a non-string value

0.2 (2012-05-02)

  • Handle Windows or Mac line endings

0.1 (2011-10-07)

Initial release.

Metadata

Release files for jprops 2.0.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for jprops 2.0.2
File Size Uploaded
jprops-2.0.2.tar.gz 6.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for jprops 2.0.2
File Interpreter ABI Platform
jprops-2.0.2-py2.py3-none-any.whl Python 3, Python 2 none any Details

Total release size: 15.3 kB

Release files / jprops-2.0.2.tar.gz

Download URL jprops-2.0.2.tar.gz
Size 6.3 kB
Tags Source
SHA-256 checksum
How to use checksums
d297231833b6cd0a3f982a48fe148a7f9817f2895661743d166b267e4d3d5b2c
BLAKE2b-256 checksum
How to use checksums
0dd60a18082cc3349128c1979c747e772b97e38f827b838bb8be2a5f48dbe0dc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release files / jprops-2.0.2-py2.py3-none-any.whl

Download URL jprops-2.0.2-py2.py3-none-any.whl
Size 9.1 kB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
f6be13f0bbc3ca6f7175d74ec8f9f17a4f33a6874473733591c6551d272186a0
BLAKE2b-256 checksum
How to use checksums
d057cb7364a3c3140091de3fffc6b91f7a638c7aeccabeef9b3f6e418a545d5b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release history Release notifications | RSS feed

This release

2.0.2 This release

2 release files

2.0

2 release files

1.0

1 release file

0.2

1 release file

0.1

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page