Ich bin ein neuer Python-Benutzer.
Ich habe eine txt-Datei, die etwas wie sein wird:
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
aber es können weniger oder mehr Zeilen sein.
Ich möchte jede Zeile als Liste importieren.
Ich weiß, dass man das auch so machen kann:
filename = 'MyFile.txt'
fin=open(filename,'r')
L1list = fin.readline()
L2list = fin.readline()
L3list = fin.readline()
aber da ich nicht weiß, wie viele Zeilen ich haben werde, gibt es eine andere Möglichkeit, einzelne Listen zu erstellen?
Erstellen Sie keine separaten Listen, sondern eine Liste von Listen:
results = []
with open('inputfile.txt') as inputfile:
for line in inputfile:
results.append(line.strip().split(','))
oder noch besser, verwenden Sie das Modul csv
:
import csv
results = []
with open('inputfile.txt', newline='') as inputfile:
for row in csv.reader(inputfile):
results.append(row)
Listen oder Wörterbücher sind weit überlegene Strukturen, um eine beliebige Anzahl von Dingen, die aus einer Datei gelesen werden, im Auge zu behalten.
Beachten Sie, dass Sie mit beiden Schleifen auch die Datenzeilen einzeln ansprechen können, ohne den gesamten Inhalt der Datei in den Speicher einlesen zu müssen; anstatt results.append()
zu verwenden, verarbeiten Sie diese Zeile einfach direkt dort.
Nur der Vollständigkeit halber hier die kompakte Einzeiler-Version, um eine CSV-Datei in einem Rutsch in eine Liste einzulesen:
import csv
with open('inputfile.txt', newline='') as inputfile:
results = list(csv.reader(inputfile))
Erstellen Sie eine Liste von Listen:
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(","))
with open('path/to/file') as infile: # try open('...', 'rb') as well
answer = [line.strip().split(',') for line in infile]
Wenn Sie die Zahlen als int
haben wollen:
with open('path/to/file') as infile:
answer = [[int(i) for i in line.strip().split(',')] for line in infile]