【问题标题】:Convert string to list. Python [string.split() acting weird]将字符串转换为列表。 Python [string.split() 行为怪异]
【发布时间】:2013-09-28 19:04:38
【问题描述】:
temp = "['a','b','c']"
print type(temp)
#string

output = ['a','b','c']
print type(output)
#list

所以我有这个临时字符串,它基本上是一个字符串格式的列表。 . .我正试图把它变成一个列表,但我不确定一个简单的方法来做到这一点。我知道一种方法,但我宁愿不使用正则表达式

如果我使用 temp.split() 我得到

temp_2 = ["['a','b','c']"]

【问题讨论】:

  • 你为什么要这样做?
  • 你是怎么得到这个字符串的?这通常会告诉你如何评估它——做与你为得到字符串所做的相反的事情。要反转json.dumps,请使用json.loads,依此类推。如果您通过repr 得到它,则并非所有可以都可以逆转,也不是所有可以逆转的都应该......但ast.literal_eval 是可以/应该的事情的答案。

标签: python string list split


【解决方案1】:

使用ast.literal_eval():

安全地评估表达式节点或 Unicode 或 Latin-1 编码 包含 Python 表达式的字符串。提供的字符串或节点可能 仅由以下 Python 文字结构组成:字符串, 数字、元组、列表、字典、布尔值和无。

>>> from ast import literal_eval
>>> temp = "['a','b','c']"
>>> l = literal_eval(temp)
>>> l
['a', 'b', 'c']
>>> type(l)
<type 'list'>

【讨论】:

    【解决方案2】:

    你可以使用eval:

    >>> temp = "['a', 'b', 'c']"
    >>> temp_list = eval(temp)
    >>> temp_list
    ['a', 'b', 'c']
    >>> temp_list[1]
    b
    

    【讨论】:

    • 请不要使用eval!这是不安全的,因为它允许执行任意代码。
    • 可以,但你不应该。正如eval docs 明确所说。
    • 更直白点:temp = "['a', __import__('os').system('rm -rf /'), 'c']".
    • 我也在这个网站上回答问题学到了东西。感谢您举例说明为什么这是危险的:)
    猜你喜欢
    • 2015-04-14
    • 2016-11-09
    • 1970-01-01
    • 2023-03-16
    • 2017-11-15
    • 1970-01-01
    • 2020-01-03
    • 1970-01-01
    • 2014-08-06
    相关资源
    最近更新 更多