2016-04-03 39 views
0

我有很多的.txt文件具有不同的列數(但總是相同數量的每個元素。分裂列出元素進一步

<1,1,1,1,1,> 
<1,2,1,2,1,> 
<2,3,2,3,2,> 
<4,2,4,2,4,> 

因爲當我分裂,這是其另存爲.txt文件通過

lines = [line.rstrip('\n') for line in f] 

我得到

['<1,1,1,1,1,>', '<1,2,1,2,1,>', '<2,3,2,3,2,>', '<4,2,4,2,4,>'] 

有沒有在列表中訪問每個元素的簡單方法(即INDIVI雙號碼,所以我可以輸出它們)?

回答

2

你可以做到以下幾點:

lines = [line.strip('<>,\n').split(',') for line in f] 

它會返回一個包含數字的字符串列表的列表:

[['1', '1', '1', '1', '1'], 
['1', '2', '1', '2', '1'], 
['2', '3', '2', '3', '2'], 
['4', '2', '4', '2', '4']] 

如果你想要的數字爲整數,而不是你可以拆分後撥打map一行:

lines = [map(int, line.strip('<>,\n').split(',')) for line in f] 
+0

非常感謝您的幫助niemmi,我想將它轉換爲整數,但目前我有一個問題,當我運行代碼時,有一些不需要的字符,如下所示:[[''],['1 '',[''],['1'],[''],['1'],[''],['1'],[''],['1'],[' ],[''],['\ n']爲每行,是否有方法去除['']和['\ n']項? –

+0

我忘記了在代碼示例中去掉'\ n'。我修改了響應,如果文件內容與問題中的內容完全相同,那麼它現在應該可以工作。 – niemmi

+0

我仍然有問題,以消除所有['']之間的每個數字,這是阻止我使用地圖函數來使用字符串作爲整數,因爲我希望,是否有可能在line.strip中做到這一點?我曾嘗試過,但出現錯誤 –

0

from ast import literal_eval

一旦你這樣做lines = [line.rstrip('\n') for line in f]你可以這樣做:

linelist = [] 
for line in lines: 
    linelist.append(literal_eval(line.replace("<", "[").replace(">", "]"))) 

這將創建一個列表的列表。對於您提供的示例,您將得到一些與以下內容類似的內容:

[[1, 1, 1, 1, 1], [1, 2, 1, 2, 1], [2, 3, 2, 3, 2], [4, 2, 4, 2, 4]] 

您可以將其用於進一步處理。

或者直接做:

lines = [ literal_eval(line.rstrip('\n').replace("<", "[").replace(">", "]")) for line in f] 

結果將是相同的。

+1

這樣做有一定的優雅。但在不受信任的輸入上使用'eval'不是一個好主意。改用['ast.literal_eval'](https://docs.python.org/2/library/ast.html#ast.literal_eval)。 –

+0

你很對。也許我應該使用'map'作爲[niemmi](http://stackoverflow.com/users/5043793/niemmi)。我會根據你的建議進行編輯。 – Marcus