如何在Python中从文件导入列表
我有一个文件,里面的内容是 f = [1,1,2,2,2,3,3,4,5]
,我想把这个文件导入成一个列表,这样它就能被当作列表来使用。比如说,我有两个文件,一个文件的内容是 f = [1,1,1,1,1]
,另一个文件的内容是 d = [2,2,2,2,2]
,我想用 zip(i,j) for i in f and for j in d
来处理它们。
f = file('f.txt')
d = file('d.txt')
for i in f:
for j in d:
print zip(i,j)
结果是
[('[', '['), ('1', '2'), (',', ','), ('1', '2'), (',', ','), ('1', '2'), (',', ','), ('1', '2'), (',', ','), ('1', '2'), (']', ']'), ('\n', '\n')]
我希望结果是这样的
[(1,2),(1,2), (1,2),(1,2), (1,2)]
4 个回答
0
如果你对这些数据有完全的控制权,我建议你使用pickle库来进行序列化,而不是把它们的表示形式转成文本。
想了解更多信息,可以查看这个链接:http://docs.python.org/library/pickle.html#example。
1
首先,你想把文件当作Python文本来处理,但如果只是读取文件内容,你得到的只是一个字符串。遍历字符串时,你只能一个一个地拿到字符。
所以与其仅仅读取内容,不如把它们当作模块来加载:from f import f
,from d import d
。
这要求这些模块放在一个“包”里,也就是一个在你的PYTHONPATH中的文件夹,并且这个文件夹里要有一个__init__.py
文件。这样做可以让你保持代码的整洁。
然后,你就可以像使用普通的Python变量一样,使用f
和d
,它们会存储列表。
5
ast.literal_eval 是一种安全的方法,可以把字符串当作 Python 的基本数据类型来处理,比如字符串、数字、元组、列表、字典、布尔值和 None。
import ast
with open('f.txt') as f:
with open('d.txt') as d:
flist=ast.literal_eval(f.read())
dlist=ast.literal_eval(d.read())
print(zip(flist,dlist))