Импортируйте txt файл и имея каждую строку в виде списка
Я новый пользователь Python.
У меня есть txt файл, который будет выглядеть примерно так:
3,1,3,2,3
3,2,2,3,2
2,1,3,3,2,2
1,2,2,3,3,1
3,2,1,2,2,3
но может быть меньше или больше строк.
Я хочу импортировать каждую строку в список.
Я знаю, что вы можете сделать это как таковое:
filename = 'MyFile.txt'
fin=open(filename,'r')
L1list = fin.readline()
L2list = fin.readline()
L3list = fin.readline()
но поскольку я не знаю, сколько строк у меня будет, есть ли другой способ создания отдельных списков?
Ответы
Ответ 1
Не создавайте отдельные списки; создайте список списков:
results = []
with open('inputfile.txt') as inputfile:
for line in inputfile:
results.append(line.strip().split(','))
или еще лучше, используйте csv
module:
import csv
results = []
with open('inputfile.txt', newline='') as inputfile:
for row in csv.reader(inputfile):
results.append(row)
Списки или словари - это гораздо более сложные структуры, чтобы отслеживать произвольное количество вещей, считанных из файла.
Обратите внимание, что любой цикл также позволяет вам отдельно обращаться к строкам данных, не зачитывая все содержимое файла в память; вместо того, чтобы использовать results.append()
, просто обработайте эту строку прямо там.
Просто для полноты, здесь однострочный компактный вариант для чтения в CSV файле в список за один раз:
import csv
with open('inputfile.txt', newline='') as inputfile:
results = list(csv.reader(inputfile))
Ответ 2
Создайте список списков:
with open("/path/to/file") as file:
lines = []
for line in file:
# The rstrip method gets rid of the "\n" at the end of each line
lines.append(line.rstrip().split(","))
Ответ 3
with open('path/to/file') as infile: # try open('...', 'rb') as well
answer = [line.strip().split(',') for line in infile]
Если вам нужны цифры как int
s:
with open('path/to/file') as infile:
answer = [[int(i) for i in line.strip().split(',')] for line in infile]
Ответ 4
lines=[]
with open('file') as file:
lines.append(file.readline())