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

У вас есть «список», а не массив. Последнее [отличается от 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

Использование первого предложенного вами решения дает мне «Линия 13 в читателе = csv (infile): TypeError: объект« module »не является вызываемой ошибкой. Вы знаете, почему это может быть? – TeeKayM

+0

@TeeKayM: потому что я являюсь numpty и забыл часть '.reader'. –

+0

Ahh ok, я вижу это сейчас. Теперь он работает. Спасибо! – 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