2015-11-07 86 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