tomli

2025-12-11 0 507

tomli

Lil'Toml Parser

用mdformat-toc生成的目录

  • 简介

  • 安装

  • 用法

  • 常问问题

    • 为什么要解析?

    • 是否支持保存往返解析的评论?

    • 是否有dumpswriteencode功能?

    • TOML类型如何映射到Python类型中?

  • 表现

    • 纯Python

    • mypyc生成的轮子

简介

tomli是一个解析Toml的Python图书馆。它与TOML V1.0.0完全兼容。

tomli的版本tomllib模块通过PEP 680添加到Python 3.11 tomli标准库中。Tomli继续为Python版本的PYTHON提供了一个Backport,其中尚未提供标准库模块,并且尚未达到其寿命终止。

tomli使用MyPyC为大多数广泛使用的平台生成二进制轮毂,因此Python 3.11+用户可能更喜欢它,而不是tomllib ,以提高性能。纯Python车轮在任何平台上都可以使用,应与tomllib相同。

安装

pip install tomli

用法

解析汤绳

 import tomlitoml_str = """[[players]]name = "Lehtinen"number = 26[[players]]name = "Numminen"number = 27"""toml_dict = tomli . loads ( toml_str )assert toml_dict == {"players" : [{ "name" : "Lehtinen" , "number" : 26 }, { "name" : "Numminen" , "number" : 27 }]
}

解析toml文件

 import tomliwith open ( "path_to_file/conf.toml" , "rb" ) as f :toml_dict = tomli . load ( f )

该文件必须以二进制模式打开(带有"rb"标志)。二进制模式将强制执行将文件解码为UTF-8,并且禁用了通用新线,这两者都是正确解析TOML所必需的。

处理无效的TOML

 import tomlitry :toml_dict = tomli . loads ( "]] this is invalid TOML [[" )except tomli . TOMLDecodeError :print ( "Yep, definitely not valid." )

请注意,错误消息仅视为信息。不应假定它们在tomli版本中保持不变。

构造decimal.Decimal

 from decimal import Decimalimport tomlitoml_dict = tomli . loads ( "precision-matters = 0.982492" , parse_float = Decimal )assert isinstance ( toml_dict [ "precision-matters" ], Decimal )assert toml_dict [ "precision-matters" ] == Decimal ( "0.982492" )

请注意, decimal.Decimal可以用另一个可call脚替换,该可召唤将TOML Float从字符串转换为Python类型。然而, decimal.Decimal是无法忍受浮动不准确的用例,这是一个实用的选择。

非法类型是dict and list及其亚型。如果parse_float产生非法类型,则将提高ValueError

构建tomli / tomllib兼容层

Python版本3.11+带有tomli版本的船: tomllib标准库模块。要构建使用标准库(如果有)但仍然与Python 3.6+无缝工作的代码,请执行以下操作。

而不是硬tomli依赖性,而是使用以下依赖规范符在不可用的标准库模块时才需要tomli :

 tomli >= 1.1.0 ; python_version < "3.11"

然后,在您的代码中,使用以下后备机制导入TOML解析器:

 import sysif sys . version_info >= ( 3 , 11 ):import tomllibelse :import tomli as tomllibtomllib . loads ( "['This parses fine with Python 3.6+']" )

常问问题

为什么要解析?

  • 是小'

  • 纯python具有零依赖性

  • 最快的纯Python Parser *:18倍与Tomlkit一样快,2.1倍,toml

  • 仅输出基本数据类型

  • 100%规格:通过Burntsushi/Toml-Test测试套件通过所有测试

  • 经过彻底测试:100%分支机构覆盖

是否支持保存往返解析的评论?

不。

tomli .loads函数返回一个平原dict ,该命令仅来自标准库中的内置类型和类型。保留评论需要返回自定义类型,因此不会支持tomli .loadstomli .load函数。

如果您需要保存风格,请查看Toml套件。

是否有dumpswriteencode功能?

tomli -W是tomli的仅写作,提供dumpdumps功能。

核心库不包括写入功能,因为大多数TOML用例都是只读的,而tomli打算最小。

TOML类型如何映射到Python类型中?

TOML类型 Python类型 细节
文档根 dict
钥匙 str
细绳 str
整数 int
漂浮 float
布尔 bool
偏移日期时间 datetime.datetime tzinfo属性设置为datetime.timezone的实例
本地日期时间 datetime.datetime tzinfo属性设置为None
本地日期 datetime.date
当地时间 datetime.time
大批 list
桌子 dict
内联表 dict

表现

该存储库中的benchmark/文件夹包含一个性能基准,用于比较各种Python Toml Parsers。

以下是提交0724E2A的结果。

纯Python

 foo@bar:~/dev/ tomli $ python --versionPython 3.12.7foo@bar:~/dev/ tomli $ pip freezeattrs==21.4.0click==8.1.7pytomlpp==1.0.13qtoml==0.3.1rtoml==0.11.0toml==0.10.2tomli @ file:///home/foo/dev/ tomlitomlkit==0.13.2foo@bar:~/dev/ tomli $ python benchmark/run.pyParsing data.toml 5000 times:------------------------------------------------------    parser |  exec time | performance (more is better)-----------+------------+-----------------------------     rtoml |    0.647 s | baseline (100%)  pytomlpp |    0.891 s | 72.62%     tomli |     3.14 s | 20.56%      toml |     6.69 s | 9.67%     qtoml |     8.27 s | 7.82%   tomlkit |     56.1 s | 1.15%

mypyc生成的轮子

 foo@bar:~/dev/ tomli $ python benchmark/run.pyParsing data.toml 5000 times:------------------------------------------------------    parser |  exec time | performance (more is better)-----------+------------+-----------------------------     rtoml |    0.668 s | baseline (100%)  pytomlpp |    0.893 s | 74.81%     tomli |     1.96 s | 34.18%      toml |     6.64 s | 10.07%     qtoml |     8.26 s | 8.09%   tomlkit |     52.9 s | 1.26%

下载源码

通过命令行克隆项目:

git clone https://github.com/hukkin/tomli.git

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

申明:本文由第三方发布,内容仅代表作者观点,与本网站无关。对本文以及其中全部或者部分内容的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。本网发布或转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

左子网 编程相关 tomli https://www.zuozi.net/34023.html

TaskbarX
上一篇: TaskbarX
RVC Discord Bot
下一篇: RVC Discord Bot
常见问题
  • 1、自动:拍下后,点击(下载)链接即可下载;2、手动:拍下后,联系卖家发放即可或者联系官方找开发者发货。
查看详情
  • 1、源码默认交易周期:手动发货商品为1-3天,并且用户付款金额将会进入平台担保直到交易完成或者3-7天即可发放,如遇纠纷无限期延长收款金额直至纠纷解决或者退款!;
查看详情
  • 1、描述:源码描述(含标题)与实际源码不一致的(例:货不对板); 2、演示:有演示站时,与实际源码小于95%一致的(但描述中有”不保证完全一样、有变化的可能性”类似显著声明的除外); 3、发货:不发货可无理由退款; 4、安装:免费提供安装服务的源码但卖家不履行的; 5、收费:价格虚标,额外收取其他费用的(但描述中有显著声明或双方交易前有商定的除外); 6、其他:如质量方面的硬性常规问题BUG等。 注:经核实符合上述任一,均支持退款,但卖家予以积极解决问题则除外。
查看详情
  • 1、左子会对双方交易的过程及交易商品的快照进行永久存档,以确保交易的真实、有效、安全! 2、左子无法对如“永久包更新”、“永久技术支持”等类似交易之后的商家承诺做担保,请买家自行鉴别; 3、在源码同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外); 4、在没有”无任何正当退款依据”的前提下,商品写有”一旦售出,概不支持退款”等类似的声明,视为无效声明; 5、在未拍下前,双方在QQ上所商定的交易内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准); 6、因聊天记录可作为纠纷评判依据,故双方联系时,只与对方在左子上所留的QQ、手机号沟通,以防对方不承认自我承诺。 7、虽然交易产生纠纷的几率很小,但一定要保留如聊天记录、手机短信等这样的重要信息,以防产生纠纷时便于左子介入快速处理。
查看详情

相关文章

猜你喜欢
发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务