简单,甚至是微不足道的山药替代品

sta的Python项目详细描述


保持简单,甚至是微不足道的yaml替代品

山药可能是可读的人类,但也有缺点。有严格的yaml、toml等,但它们都有相同的错误前提。如果你有人类手写的东西,你必须以某种方式验证。使用PyDyTiC,一个简单但功能强大的框架用于在读取内容时验证并将值转换为所需格式。这意味着文档内的类型提示没有任何意义,这增加了模糊性、不必要的复杂性和视觉混乱,更不用说那些对可用性毫无作用的特殊字符的恼人的手动转义。

stay消除了所有这些开销,并将语法减少到最低限度,这可以很容易地解析为pydantic来获得您想要的内容。

语法

停留是基于线路的。该文件逐行读取,转换为字典的生成器/列表。

文件

字典(也称为文档)由以===--开头的行分隔。例如,在一个配置中,它允许在文件顶部使用默认值,下面是用户定义的值,这些值将覆盖默认值。

简单值

从这里开始,简单的键/值对像key:value一样写在一行上。前导空格和尾随空格被删除。任何可以直接转换的东西,比如int、str、float等等,都不需要额外的字符。

简单列表

一个简单的值列表被写成key:[1 2 3 asdf“foo bar”]

评论

注释也是基于行的。任何以开头的行都将被忽略。此外,可以通过在块的上方和下方放置来注释块。

长值

任何涉及linebreak(\n)字符的内容都需要手动转义,但有一个简单的解决方案:长值。键:with::而不是:将开始一个长值块,其中所有内容都将被转义,直到一行以三个冒号开头(如果在块内,则可以通过\::::手动转义,这是唯一的例外,其他内容都将按原样分析)。

key:::
long
value
:::

长列表

类似地,您可以创建一个字符串列表,其中每一行都是一个项(删除开头和结尾的空格、换行符和制表符!):

key:::[
a
b
c
]:::

但是,与长值不同,长列表也使用列表语法,因此您可以轻松地编写这样的矩阵:

matrix:::[
[1 2 3]
[4 5 6]
[7 8 9]
]:::

等级

与json或yaml一样,可以嵌套单个文档/字典。级别由制表符或空格缩进表示(默认为4)。

a:
    b:
        c:3
    foo: 4
bar: 6

长值可以在任何点使用,在块结束之前忽略缩进级别。

指令

今后,指令(以块外%开头的行)可以用来轻松地扩展stay而不干扰其他语法,例如第三方模块,但目前没有相关的功能。

已知限制

stay试图变得简单,stay简单,因此在不破坏规范的情况下,不容易修复语法的限制。 例如,目前不可能在列表中轻松实现字典(您可以使用键值对来解决这个问题,但这可能很麻烦)。 此外,目前还不支持比列表中的列表更深的嵌套(长列表/矩阵语法)。 可以自由地提出如何通过语法来提升这些限制的想法(如果它不增加复杂性!)或者通过指令。

使用

可以加载(文件)或加载(行迭代器)来读取内容,也可以转储(dict迭代器)来转换内容。 示例可以在Showcase Jupyter笔记本(in/docs)中找到,也可以查看测试。 请记住,stay输出一个带有n的字典列表o检查是否有重复的钥匙。 如果这对您来说是个问题,请考虑编写一个指令并提交一个pull请求。

就这样-享受吧!

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

推荐PyPI第三方库


热门话题
java WebClient请求级别超时抛出名为default onErrorDropped的运算符   java JAXB外部绑定文件错误   Freemarker中的java转义宏参数值   java正在同步来自不同对象{已编辑}的线程   java如何在另一个类上更新活动中的元素   java Hibernate连接查询   java可以使用Apache Crunch创建类似于图形的数据结构吗?   java在JLabel的开头加上3个点   java 安卓应用程序显示线程错误   java@RequestBody在Spring中总是空的   java Android异步任务永远不会结束   具有多个属性的java Jaxws枚举   java中的安卓 Stripe InvalidRequestException   多线程java。util。非多线程程序中的ConcurrentModificationException   Minecraft Java插件如何删除HashMap中存储的所有块   空Java字符串的大小   从AJP连接器请求检索Shibboleth属性的java   oracle11g将Java类文件加载到Oracle数据库