【问题标题】:Ignore comma in quotes when using json.loads() / Python? [duplicate]使用 json.loads() / Python 时忽略引号中的逗号? [复制]
【发布时间】:2019-03-19 00:36:06
【问题描述】:

目前正在使用以下命令:

python foo.py "['A,B,C,D','A,B,C','A,B','A']"

我想把它转换成一个实际的字符串数组:

A[0] = 'A,B,C,D'
A[1] = 'A,B,C' 
A[2] = 'A,B' 
A[3] = 'A' 

目前,我一直在尝试使用json.loads()sys 将字符串读入对象或列表。

但是,单引号的存在似乎会导致以下错误。

ValueError: No JSON object could be decoded

然而,没有单引号,我最终得到了数组:

B = ["A","B","C","D","A","B","C","A","B","A"]

如何让 Python 在跟踪外部逗号的同时忽略内部逗号,以便生成上面显示的A 中给出的字符串数组?

【问题讨论】:

  • 您的输入不是 JSON,所以...为什么要使用 json.loads
  • 为什么不使用'["A,B,C,D","A,B,C","A,B","A"]'
  • 我现在找不到副本,但您正在寻找 ast.literal_eval
  • @T.J.Crowder 我使用它是因为它适用于“[1,2,3,4]”之类的东西。这是我第一次遇到这样的问题。您能推荐我另一种使用方法吗?

标签: python json python-2.7 sys


【解决方案1】:

您可以使用ast.literal_eval 来...

安全地评估表达式节点或包含 Python 的字符串 表达。提供的字符串或节点只能包含以下内容 Python 文字结构:字符串、字节、数字、元组、列表、字典、 集合、布尔值和无。

>>> from ast import literal_eval
>>> literal_eval("['A,B,C,D','A,B,C','A,B','A']")
['A,B,C,D', 'A,B,C', 'A,B', 'A']

【讨论】:

    猜你喜欢
    • 2014-07-05
    • 2020-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-26
    • 2022-06-13
    • 2015-10-23
    相关资源
    最近更新 更多