python - 从无法用 ast.literal_eval 解析的字符串中解析嵌套列表
问题描述
我将一个文件解析为一个 Python 列表,我遇到了一个像这样的嵌套列表:
{ 1 4{ 2a 0.0 }{ 3 0.0 }{ 4c 0.0 }{ 5 0.0 } }
我想将它解释为一个列表,但嵌套,所以我想成为如下的 Python 列表:
[1,4,[2a,0.0],[3,0.0],[4c,0.0],[5,0.0]]
我设法用以下方法做一个正确的字符串:
l = """{ 1 4{ 2 0.0 }{ 3 0.0 }{ 4 0.0 }{ 5 0.0 } }"""
l = l.replace("{\t",",[").replace("\t}","]").replace("{","[").replace("}","]").replace("\t",",")[1:]
我也可以申请l.strip("\t")
它是一个列表,但不是嵌套的,否则它将被展平,这是我不想要的。
我试过了ast.literal_eval(l)
,但它在字符串上失败了,例如2a
解决方案
Pyparsing 有一个内置的帮助nestedExpr
器来帮助解析开始和结束分隔符之间的嵌套列表:
>>> import pyparsing as pp
>>> nested_braces = pp.nestedExpr('{', '}')
>>> t = """{ 1 4{ 2a 0.0 }{ 3 0.0 }{ 4c 0.0 }{ 5 0.0 } }"""
>>> print(nested_braces.parseString(t).asList())
[['1', '4', ['2a', '0.0'], ['3', '0.0'], ['4c', '0.0'], ['5', '0.0']]]
推荐阅读
- java - 如何从回收视图中停止回收视图?
- scala - ZIO 1.0.3 改变了环境的工作方式,现在 http4s Blaze 将无法运行
- php - var_dump 返回 null。登录页面给出一个空白页面
- php - FancyTree - 如何放入数据内容生成 php 目录
- java - 在不使用 Maven 的情况下将 JAXB 库包含到 JAR 文件中
- javascript - 在 node.js 中运行时未定义要求
- c# - 检查列表列表中的元素是否包含另一个列表
- python - 在 pytest.fail 调用中显示 pytest 差异
- google-cloud-platform - BigQuery 目标表在使用数据传输复制数据集后为空
- sql - 在 oracle 中加入时态表