用于bespon的python库
BespON的Python项目详细描述
python的bespon包在 BespON格式。
基本用法
数据的加载方式类似于python的json模块:
- bespon.load(<file-like object>)
- bespon.loads(<string or bytes>)
类似地,将数据转储到文件或字符串:
- bespon.dump(<obj>,<file-like object>)
- bespon.dumps(<obj>)
目前,只有在缩进式语法中转储是可能的。支持 因为其他款式正在开发中。只有听写、列表、Unicode 字符串、字节字符串、浮点、int、bools和None当前 支持倾倒。加载支持其他数据类型。
无损往返支持
还支持无损往返。可以加载数据, 可以修改值,然后以最小值再次保存数据 对数据文件布局的影响。
数据可以从文件或字符串加载到 RoundtripAst类。
- bespon.load_roundtrip_ast(<file-like object>)
- bespon.loads_roundtrip_ast(<string or bytes>)
这个类有两个允许修改数据的方法。
- replace_val(<path>, <obj>)这将替换当前位于 在具有<obj>的数据中的<path>。<path>必须是列表 或由dict键和列表索引组成的元组。<obj>当前必须是unicode字符串、float、int或bool,并且必须具有相同的 键入它要替换的对象。
- replace_key(<path>, <obj>)这将替换后面的dict键 <path>使用新键<obj>(将映射到与 更换的钥匙)。<obj>必须是unicode字符串、int或bool, 并且必须与要替换的对象具有相同的类型。
在RoundtripAst实例中的数据被修改后,可以对其进行编码 使用dumps()方法返回到字符串中。下面是一个例子。
>>> ast = bespon.loads_roundtrip_ast(""" key.subkey.first = 123 # Comment key.subkey.second = 0b1101 key.subkey.third = `literal \string` """) >>> ast.replace_key(['key', 'subkey'], 'sk') >>> ast.replace_val(['key', 'sk', 'second'], 7) >>> ast.replace_val(['key', 'sk', 'third'], '\\another \\literal') >>> ast.replace_key(['key', 'sk', 'third'], 'fourth') >>> print(ast.dumps()) key.sk.first = 123 # Comment key.sk.second = 0b111 key.sk.fourth = `\another \literal`
这个例子演示了bespon的几个往返功能。
- 注释和布局完全保留。
- 密钥重命名与密钥路径一起工作。每次密钥路径中出现密钥时, 它被重命名。
- 当一个数字被修改时,新值用与 旧价值观。
- 当一个带引号的字符串被修改时,新的值在同一个 风格作为旧的价值观(至少在一定程度上这是实用的)。
- 一旦修改了密钥,就必须使用新密钥 修改。旧密钥无效。
目前,往返支持仅限于更改任何unicode的值 string、float、int或bool,但不更改类型。支持更改 数据类型和更一般的数据操作将在未来添加。
提前装载和卸载
加载和转储函数支持多个关键字参数 自定义数据处理。
加载
- aliases(布尔值,默认值True):允许别名。
- circular_references(布尔值,默认值False):允许别名 创建循环引用。
- custom_parsers(dict,defaultNone):替换默认解析器 对于具有自定义分析器的指定类型。例如,使用 custom_parsers={'int': float}将导致分析所有整数 使用float()函数。
- extended_types(布尔值,默认值False):启用初步支持 对于set和odict标记的集合(例如,(set)> [1, 2, 3])。启用对复数文本和有理数的初步支持 数字文字。复数当前使用通用形式 1.0+2.0i,其中实部是可选的,虚部是 用i表示,数字必须是浮点数(十进制或十六进制 表格)。有理数使用1/2形式,其中分子和 分母必须都是十进制整数,任何符号都必须在 分数。
- float_overflow_to_inf(布尔值,默认值False):是否 非inf浮动允许溢出到inf,而不引发 错误。
- integers(布尔值,默认值True):是否允许整数。 否则它们被解释为浮动。
- only_ascii_unquoted(布尔值,默认值True):是否非ascii 标识符样式字符串允许不带引号。
- only_ascii_source(布尔值,默认值False):是否为非ascii码 允许点按字面意思出现在源代码中(而不是 通过反斜杠转义表示)。
- python_types(布尔值,默认值False):启用初步支持 对于特定于python的数据类型。目前这只支持tuple。
- {TT51}$(int,默认^ {TT52}$):最大允许嵌套 收藏深度。
转储
- hex_floats(布尔值,默认值False):浮动是否 以十六进制形式转储。
- {TT51}$(int,默认^ {TT52}$):最大允许嵌套 收藏的深度。
规格一致性
bespon包通过 BespON test suite。