分析/序列化任何标记格式

anymarkup的Python项目详细描述


Build StatusCode HealthCoverage

分析或序列化任何标记。目前支持ini、json、json5、toml、xml和yaml。 在https://github.com/bkabrda/anymarkup/issues报告错误和新功能请求。

解析:

>>> import anymarkup
>>> anymarkup.parse('foo: bar')
{'foo': 'bar'}
>>> anymarkup.parse_file('foo/bar.ini')
{'section': {'subsection': {'opt2': 'bar'}, 'opt1': 'foo'}}

$ cat foo/bar.ini
[section]
opt1=foo
[[subsection]]
opt2=bar

序列化:

>>> import anymarkup
>>> anymarkup.serialize({'foo': 'bar'}, 'json')
b'{\n  "foo": "bar"\n}'
>>> anymarkup.serialize_file({'foo': 'bar'}, 'foo/bar.json')

$ cat foo/bar.json
{
  "foo": "bar"
}

anymarkup根据bsd许可证获得许可。你可以下载官方版本 从https://pypi.python.org/pypi/anymarkup或通过pip install anymarkup安装它们。

anymarkup适用于python 2.7,>;=3.3。

自动标记语言识别

当使用anymarkup.parse(input)时,anymarkup将尝试猜测输入的标记语言。 这通常工作正常,除了:

  • ini vs toml:这两个看起来几乎相同,实际上有共同的子集(其中, 但是,会产生不同的解析结果)。正因为如此,任何有类似INI的东西 将使用ini解析器解析外观。如果要将输入字符串解析为toml, 必须使用format=toml显式指定(请参见下面的示例)。
  • json与json5:json5是json的超集,但应用并不广泛。因为实用性 对于json的使用,所有看起来像json的内容都被解析为json。如果需要输入字符串 要解析为json5,必须使用format=json5显式指定。

使用anymarkup.parse_file(path)时,任何标记都将尝试根据文件猜测格式 然后回到前面解释的猜测。这意味着如果文件 .tomlpr.json5扩展,您不必显式地提供format=<format>

关于分析基本类型的说明

解析时,anymarkup识别基本类型-NoneTypeintfloatbool (和python 2上的long)并将所有值转换为这些类型。如果你想得到 一切都是字符串,只需将force_types=Falseparseparse_file一起使用。最后, 您还可以使用force_types=None获取解析后端返回的任何内容:

>>> anymarkup.parse('a: 1')
{'a': 1}
>>> anymarkup.parse('a: 1', force_types=False)
{'a': '1'}
>>> anymarkup.parse('a: 1', force_types=None)
{'a': 1}

cli

要安装cli,请运行以下命令:

pip install anymarkup

从json到xml的转换示例:

anymarkup convert –from-format json –to-format xml <somefile.json

有关cli的完整帮助,请运行以下命令:

anymarkup –help anymarkup convert –help

有关订购信息的说明

分析某些类型的标记可以得到python的OrderedDict类型,即 XML文档和yaml!!omap(请参见http://yaml.org/type/omap.html)。anymarkup 处理此问题没有问题,但请注意,如果将它们序列化为json或ini 然后再次解析,您将丢失排序信息(这意味着您将得到 dict返回)。

这是因为json和ini解析器(据我所知)不考虑 排序键值结构很重要,但没有直接的方法 表示排序键值结构的标记语言。

依赖关系注释

如果您只需要支持的子集的任何标记功能,请阅读本节 无需安装所有解析器的标记语言。

自0.5.0版以来,anymarkup只是围绕anymarkup核心的包装库 (https://github.com/bkabrda/anymarkup-core)并且实际上不包含任何代码, 除了从任何标记核心导入。

anymarkup的核心目标是不显式地依赖于任何解析器,因此 只能使用指定的依赖项子集安装它。例如,您可以 如果您知道只解析yaml,请仅使用pyyaml安装anymarkup core。

如果安装了任何标记,您将始终获得一组完整的依赖项 您将能够解析任何受支持的标记语言。

cli需要按requirements.txt文件中的指示单击。

示例

解析示例:

ini = """
[a]
foo = bar"""

json = """
{"a": {
    "foo": "bar"
}}"""

xml = """<?xml version="1.0" encoding="UTF-8"?>
<a>
    <foo>bar</foo>
</a>"""

yaml = """
a:
  foo: bar
"""

# these will all yield the same value (except that xml parsing will yield OrderedDict)
anymarkup.parse(ini)
anymarkup.parse(json)
anymarkup.parse(xml)
anymarkup.parse(yaml)

# explicitly specify a type of format to expect and/or encoding (utf-8 is default)
anymarkup.parse('foo: bar', format='yaml', encoding='ascii')

# by default, anymarkup recognizes basic types (None, booleans, ints and floats)
#   if you want to get everything as strings, just use force_types=False

# will yield {'a': 1, 'b': True, 'c': None}
anymarkup.parse('a: 1\nb: True\nc: None')
# will yield {'a': '1', 'b': 'True', 'c': 'None'}
anymarkup.parse('a: 1\nb: True\nc: None', force_types=False)

# or parse a file
anymarkup.parse_file('foo.ini')

# if a file doesn't have a format extension, pass it explicitly
anymarkup.parse_file('foo', format='json')

# you can also pass encoding explicitly (utf-8 is default)
anymarkup.parse_file('bar', format='xml', encoding='ascii')

序列化示例:

struct = {'a': ['b', 'c']}

for fmt in ['ini', 'json', 'xml', 'yaml']:
    # any of the above formats can be used for serializing
    anymarkup.serialize(struct, fmt)

# explicitly specify encoding (utf-8 is default)
anymarkup.serialize(struct, 'json', encoding='utf-8')

# or serialize directly to a file
anymarkup.serialize_file(struct, 'foo/bar.ini')

# if a file doesn't have a format extension, pass it explicitly
anymarkup.serialize_file(struct, 'foo/bar', format='json')

# you can also pass encoding explicitly (utf-8 is default)
anymarkup.serialize_file(struct, 'foo/bar', format='json', encoding='ascii')

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

推荐PyPI第三方库


热门话题
JavaHibernate:如何使用第三个表将属性与条件连接起来   java JMS/REST客户端是作为一个集中的库,还是每个微服务一个?   java在Netbeans中生成重复代码   java处理无法映射到SOA中一个frontendpage的错误   java EditText getText不在按钮中工作单击   java您能阻止WatchService在Windows上锁定文件吗?   java在Hadoop中使用wget?   无活动数据库连接的java部署JEE/JPA应用程序   平台模块应用程序中netbeans缺少java库(netbeans 7.3.1)   java在屏幕上分布一个数据网格,它的所有项目都是可见的   在java中获得约会   if语句是Java中计算最小数的标准方法   在openGL中找不到用于纹理创建的java文件路径   java如何在firebase中运行查询以检索具有当前日期的对象?   java如何更快地加载(库)滑动图像?安卓   java将变量传递给另一个类是否使用同一个类?   在Java中,biginteger尾部递归函数仍在破坏堆栈   java蓝图服务列表:等待所有服务