2016-01-23 70 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