我正在以这种格式读取文件中的数据行:
['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? 但是,该示例在字符串中没有括号。
答案 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 char和strip离开括号和引号。此外,如果您想通过使用字符串的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']