用于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):启用初步支持 对于setodict标记的集合(例如,(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

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

推荐PyPI第三方库


热门话题
java有没有一种方法可以比较两个html文件以跟踪更改   Android中复杂WCF响应的java解析   java如何使用onSaveInstanceState保存复选框状态   java使用流api将流<@Nullable T>转换为流<@NonNull T>   java我需要使用可比较的界面比较两个形状,以确定哪个比另一个大或小   java在返回可能的alreadyset实例时,DeferredResult是否有竞争条件?   Java:FTP服务器列表的正则表达式?   java如何连接数组   java填充屏幕Android不能使用S3 S4屏幕分辨率   用于Java的安卓mapsutils?   安卓运行时异常:无法启动活动组件信息:java。lang.NullPointerException致命异常   java JComboBox列出了对象ArrayList中的字符串   java如何在遗传算法中表示时间表问题的时间表?   Java中空指针异常的帮助   由于找不到列,java Hibernate联接表策略多态性不起作用   java元映射运行本地raise“查询Prolog服务器时出错:连接被拒绝”   java是否创建一个具有不同目标对象的方法引用列表?   java所有线程都被锁定了?