Импортируйте 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())