具有许可证的纯python libconfig读写器

libconf的Python项目详细描述


LBCONF是一个纯的Python读写器,用于在{a1}中配置文件,这在C/C++项目中经常使用。它的接口类似于 json模块:四个主要方法是load()loads()dump(),和dumps()

示例用法:

import io, libconf
>>> with io.open('example.cfg') as f:
...     config = libconf.load(f)
>>> config
{'capabilities': {'can-do-arrays': [3, 'yes', True],
                  'can-do-lists': (True,
                                   14880,
                                   ('sublist',),
                                   {'subgroup': 'ok'})},
 'version': 7,
 'window': {'position': {'h': 600, 'w': 800, 'x': 375, 'y': 210},
            'title': 'libconfig example'}}

>>> config['window']['title']
'libconfig example'
>>> config.window.title
'libconfig example'

>>> print(libconf.dumps({'size': [10, 15], 'flag': True}))
flag = True;
size =
[
    10,
    15
];
<>数据可以通过索引(^ {Tt5}$)或通过属性访问。 访问.title

字符编码和转义序列

建议对unicode对象(unicodeon)使用libconf Python2,str在Python3)。为load()和输入字符串或流 loads()应该是unicode,数据中包含的所有字符串也应该是unicode 传递给dump()dumps()的结构。

load()loads()中,转义序列(例如\n\r\t,或\xNN)已解码。十六进制转义(\xNN)映射到Unicode 字符U+0000到U+00FF。所有其他字符都按原样传递。

dump()dumps()中,u+0080以下的不可打印字符被转义 作为\n\r\t\f\xNN序列。字符U+0080 以上都是按原样通过的。

写入libconfig文件

读取libconfig文件很容易。写作难度有两个因素:

第一点涉及编写pythonint值。libconf转储值 它适合于不包含“L”后缀的C/C++范围内。对于更大的 值时,将自动添加一个“L”后缀。强制添加“l” 即使是32位整数范围内的数字,也要在 LibconfInt64类。

示例:

dumps({'value': 2})                # Returns "value = 2;"
dumps({'value': 2**32})            # Returns "value = 4294967296L;"
dumps({'value': LibconfInt64(2)})  # Explicit int64, returns "value = 2L;"

第二个并发症来自于listsarrays之间的区别 在libconfig语言中。列表由()括号括起来,并且可以 其中包含任意值。数组由[]方括号括起来, 并且有明显的限制:所有值都必须是标量(int、float、bool, 字符串)并且必须是同一类型。

libconf使用以下约定:

  • 它将libconfig()列表映射到python元组,后者还使用() 语法。
  • 它将libconfig[]数组映射到python列表,python列表还使用[] 语法。

这在两种语言之间提供了很好的对称性,但有一个缺点 转储python列表继承了libconfig数组的限制。 要显式控制是否转储列表或数组,请包装python 列表/元组位于LibconfListLibconfArray中。

示例:

# Libconfig lists (=Python tuples) can contain arbitrary complex types:
dumps({'libconf_list': (1, True, {})})

# Libconfig arrays (=Python lists) must contain scalars of the same type:
dumps({'libconf_array': [1, 2, 3]})

# Equivalent, but more explit by using LibconfList/LibconfArray:
dumps({'libconf_list': LibconfList([1, True, {}])})
dumps({'libconf_array': LibconfArray([1, 2, 3])})

与其他python libconfig库的比较

Pylibconfig2是另一个纯python libconfig读取器。是API 是基于C++接口,而不是Python ^ {A2}模块。 它是根据gplv3授权的,这使得它不适合大量使用 项目数量。

Python-libconfig是一个库,它为 LICONFIG++C++库。虽然许可证(BSD)要求 安装时的编译步骤,这可能是一个缺点。

我写了LBCONF(这个图书馆),因为两个现存的图书馆都没有。 符合我的要求。我有一个与工作相关的项目不是开源的 (排除Pylibconfig2)我不想让 python库配置。此外,我喜欢编写解析器,这看起来很不错 机会:-)

发行说明

  • 2.0.0,发布于2018-11-23
    • dump()dumps()的输出验证:在以下情况下引发异常 正在转储C libconfig实现无法读取的数据。 此更改可能会对使用<;2.0.0!的代码引发异常!
    • 为添加LibconfListLibconfArrayLibconfInt64类 对dump()/dumps()输出进行更细粒度的控制。
    • F型ixAttrDict类中的deepcopy()(谢谢anandtella)。
  • 1.0.1,2017-01-06发布
    • 在读取较大文件时显著提高性能
    • 一些较小的改进和修复
  • 1.0.0,2016-10-26发布:
    • 添加写入libconf文件的能力(dump()dumps(), 感谢clarkli86和eatsan)
    • 一些较小的改进和修复
  • 0.9.2,2016-09-09发布:
    • 修复与早于2.7.6的python版本的兼容性(感谢anandtella)

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

推荐PyPI第三方库


热门话题
java IllegalStateException:在onBackPressed()上的onSaveInstanceState之后无法执行此操作;   java处理巨大的JSON响应   指向易趣时出现java fileNotFoundException。来自手机的com   java从数组填充GridView   两个三维向量之间的角度   java无法运行程序“cf”:错误=2,没有这样的文件或目录,错误=2   java如何使用DOCX4J从<a href到MS word bookmark/hyperlink创建内部超链接。使用DOCX4J为word文档中的TOC创建超链接   设计模式java的目标是什么。尼奥。文件CopyOption接口?   java从SQLiteDB获取选择信息?   Java引用错误   使用函数作为参数的java   tic-tac-toe似乎无法正确编译我的方法(Java)   使用泛型作为方法参数的java   java类'OIDCtenatConfig'无法解析,为什么?   如果Java中有两个同名的方法,如何告诉编译器我将使用什么方法?   java hazelcast flake id返回不同的数据   java如何按值对树集排序?   java为什么泛型类型信息在类文件中可见?   JavaSpringDataJPA+SpringProjections使用@Query(native和JPQL)为相关实体返回null