【问题标题】:Attempts to parse string representation of list with ast.literal_eval or json.loads do not work尝试使用 ast.literal_eval 或 json.loads 解析列表的字符串表示不起作用
【发布时间】:2019-01-28 01:30:34
【问题描述】:

我有一个字符串格式的列表列表:

arg = '[[ABC, DEF], 10.10.10.10, 12345]'

我喜欢将其转换为字符串对象列表: ['[ABC, DEF]', '10.10.10.10', '12345']

我尝试使用ast.literal_eval(arg)json.loads(arg) 转换为列表类型的python 对象,但这两种方法都会引发错误,因为我的“arg”包含无法评估的字符串。

有没有更简单的方法来实现这一点?

【问题讨论】:

  • 所需输出中的 ABC、DEF 是什么?您的意思是“ABC”、“DEF”吗?
  • 这不是一个有效列表的字符串表示,10.10.10.10 应该是什么
  • 就此而言,您希望从10.10.10.10 获得什么样的对象?
  • @galfisher。不是重复的。
  • 一开始为什么会有这个?如果此字符串来自您编写的代码(或同事,或您支付支持合同的人,或合作伙伴,或者通常是您可以大喊大叫直到他们修复它的人),为什么不修复该代码而不是尝试解决它?

标签: python string python-2.7


【解决方案1】:

这看起来像字符串化的 YAML。

>>> import yaml
>>> yaml.safe_load('[[ABC, DEF], 10.10.10.10, 12345]')
[['ABC', 'DEF'], '10.10.10.10', 12345]

PyYAML Documentation.

【讨论】:

  • 感谢@coldspeed。有没有办法在不使用 yaml 的情况下获得所需的输出?系统没有安装 yaml。因此,我试图避免为我的模块的用户创建依赖项。
  • @PYN 不,句号。
  • yaml 默认附带 python-2.7+ ..huh?
  • @wim 我想知道如果它是标准库的一部分,为什么会有一个安装页面,我不确定。我只是在黑暗中拍了一张……你知道它是什么时候推出的吗?谢谢!
  • 据我所知,yaml 从未出现在 Python 的 any 版本的标准库中(可能永远不会出现)。为什么你不这么认为?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-21
  • 2015-04-08
  • 2014-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多