2015-11-07 87 views
0

我已经创建了一个程序,它输出的数字1到25以伪随机顺序一个文本文件,例如像这样:文件列表,进口为蟒蛇单独列出2.7

[21, 19, 14, 22, 18, 23, 25, 10, 6, 9, 1, 13, 2, 7, 5, 12, 8, 20, 24, 15, 17, 4, 11, 3, 16] 

现在我有另一个python文件,它应该读取我之前创建的文件,并使用排序算法对数字进行排序。

问题是,我似乎无法弄清楚如何将我之前创建的列表作为列表读入文件。

实际上有办法做到这一点吗?或者我会更好地重写我的输出程序,以便我可以将输入转换为列表?

+0

您可以通过线列表中的元素线写入你的文件和使用这个http://stackoverflow.com/questions/3925614/how-do-you-read-a-file-into-a-list-in-python – cgon

+0

是的,但它更简单,如果你的原始程序doesn' t保存括号。正如戈登所表明的,如果你也留下逗号,那就更简单了。 –

回答

2

如果你的文件看起来像:

21 
19 
14 
22 
18 
23 
... 

使用本:

with open('file') as f: 
    mylist = [int(i.strip()) for i in f] 

如果真的看起来像[21, 19, 14, 22...]列表,这里有一个简单的方法:

with open('file') as f: 
    mylist = list(map(int, f.read().lstrip('[').rstrip(']\n').split(', '))) 

如果您的文件不是严格符合规格。例如,它看起来像[ 21,19, 14 , 22...]。下面是使用正则表达式的另一种方式:

import re 
with open('file') as f: 
    mylist = list(map(int, re.findall('\d+', f.read()))) 
+0

可能不会,因为数字看起来像是全部在一行上,并且它们之间用逗号和空格分隔。 –

+0

@ PM2Ring那么,你的意思是OP真的写了一个列表作为字符串到文件中?然而,我永远不会那样做...... –

+0

@ PM2Ring我编辑了我的答案:P –

1

如果你不想改变你的当前脚本的输出,你可以使用ast.literal_eval()

import ast 
with open ("output.txt", "r") as f: 
    array=ast.literal_eval(f.read()) 
+1

永远不要使用'eval()'... –

+1

@KevinGuan好的感谢您的反馈。我更新了使用'ast.literal_eval()'的答案 – jayant