2016-01-23 103 views
0

我有叫「scores.txt」的示例文件持有以下值:如何在Python中將文件追加到列表中?

10,0,6,3,7,4 

我希望能夠以某種方式採取從線路的每個值,使之成爲其追加到列表sampleList = [10,0,6,3,7,4]

我曾嘗試使用下面的下面的代碼這樣做,

score_list = [] 

opener = open('scores.txt','r') 

for i in opener: 
    score_list.append(i) 

print (score_list) 

這部分工作,但由於某些原因,它沒有做正確。它只是將所有的值粘貼到一個索引中而不是單獨的索引中。我怎樣才能做到這一點,所有的價值觀都會被放入他們自己的獨立指數中?

+0

你有一個'list',而不是一個數組。後者是[Python中不同的東西](https://docs.python.org/2/library/array.html)。 –

+0

那我的錯誤。 – TeeKayM

回答

3

您有CSV數據(逗號分隔)。最簡單的就是使用csv module

import csv 

all_values = [] 

with open('scores.txt', newline='') as infile: 
    reader = csv.reader(infile) 
    for row in reader: 
     all_values.extend(row) 

否則,分裂值。每次讀線與數字之間的','字符的字符串:

all_values = [] 

with open('scores.txt', newline='') as infile: 
    for line in infile: 
     all_values.extend(line.strip().split(',')) 

無論哪種方式,all_values列表結束。如果所有的值僅包含數字,你可以將這些轉換爲整數:

all_values.extend(map(int, row)) 

all_values.extend(map(int, line.strip().split(','))) 
+0

使用您提供的第一個解決方案給了我一個'讀取器= csv(infile)中的第13行:TypeError:'模塊'對象不可調用'錯誤。你知道這可能是爲什麼嗎? – TeeKayM

+0

@TeeKayM:因爲我是一個數字,忘記了'.reader'部分。 –

+0

呵呵,我現在看到它。現在它工作。謝謝! – TeeKayM

2

這是一個有效的方式該怎麼做,而無需使用任何外部包裝:

with open('tmp.txt','r') as f: 
    score_list = f.readline().rstrip().split(",") 

# Convert to list of int 
score_list = [int(v) for v in score_list] 

print score_list 
+0

絕對有幫助。我可以問:'.rstrip()'和'.split()'函數是做什麼的?謝謝 – TeeKayM

+0

當然,'rstrip'函數刪除行結束符,'split(「,」)'將字符串分隔開,「」 – desa

2

只需在每行上使用逗號分隔的split,然後將返回的列表添加到您的score_list,如下所示:

opener = open('scores.txt','r') 
score_list = [] 

for line in opener: 
    score_list.extend(map(int,line.rstrip().split(','))) 

print(score_list) 
+0

您應該真的使用'score_list.extend()'或使用'score_list + ='來避免創建新的一直列出。 –

+0

@MartijnPieters謝謝。更新我的答案以使用'extend' – Rein

相關問題