如何将列表相似转换为列表?

时间:2013-12-12 12:28:13

标签: python list parsing tuples

我正在以这种格式读取文件中的数据行:

['A', 'B', 'C', 'D', 'E']
['1', '2', '3', '4', '5']

...等

然而,当我做type(dataInput[0])时,它告诉我它来自类型字符串。虽然它看起来像带括号和所有的列表。如何将dataInput[0]直接转换为列表而不是字符串?

以下是一些代码:

fobj = open(selectedCase, 'r').read()
dataInput = re.split('\n', fobj)

我见过如下线程: How to convert comma-delimited string to list in Python? 但是,该示例在字符串中没有括号。

4 个答案:

答案 0 :(得分:5)

使用ast.literal_eval()将这些字符串转换为Python列表:

import ast

dataInput = [ast.literal_eval(line) for line in fobj.splitlines()]

演示:

>>> import ast
>>> result = ast.literal_eval("['A', 'B', 'C', 'D', 'E']")
>>> type(result)
<class 'list'>
>>> result
['A', 'B', 'C', 'D', 'E']

您可能希望将文件对象用作上下文管理器,让Python再次显式关闭它:

with open(selectedCase) as infh:
    dataInput = [ast.literal_eval(line) for line in infh]

这也使用文件对象作为迭代器,循环将从文件一次给出一行。

答案 1 :(得分:0)

我可能遗漏了一些东西,但是如果你的数据很干净,你就不能这样做:

In [1]: x = "['a','b']"

In [2]: y = eval(x)

In [3]: y
Out[3]: ['a', 'b']

In [4]: type(y)
Out[4]: list

答案 2 :(得分:0)

首先,如果文件确实采用您指定的格式,您可以使用readlines来获取该行的字符串。

如果您不想eval文件中的内容(例如,因为您不信任来源),那么您可以split by the comma charstrip离开括号和引号。此外,如果您想通过使用字符串的isxyz方法检查您是否有数字或字符串,例如isdigit

答案 3 :(得分:0)

这是我的方法:

with open('f.txt', 'r') as f:
    # The strip function gets rid of whitespace at the end of a line
    defaultInput = [eval(var.strip()) for var in f]  # A list comprehension

    print defaultInput[0]
    print type(defaultInput[0])
    print defaultInput[1]
    print type(defaultInput[1])

输出:

['A', 'B', 'C', 'D', 'E']
<type 'list'>
['1', '2', '3', '4', '5']
<type 'list'>

f.txt的位置:

['A', 'B', 'C', 'D', 'E']
['1', '2', '3', '4', '5']