Python-Lese aus Datei in mehrere Listen

Ich glaube nicht, dass jemand mich in die richtige Richtung zeigen könnte?

Ich frage mich, wie es am besten ist, Werte aus einer Textdatei herauszuziehen, dann brechen sie auf und legen sie wieder in Listen an der gleichen Stelle wie ihre entsprechenden Werte.

Tut mir leid wenn das nicht klar ist, vielleicht wird das deutlich machen. Dies ist der Code, der die Datei ausgibt:

#while loop with open('values', 'a') as o: o.write("{}, {}, {}, {}, {}, {}, {}\n".format(FirstName[currentRow],Surname[currentRow], AnotherValue[currentRow], numberA, numberB)) currentRow+1 

Ich möchte das Gegenteil tun und die Werte nehmen, wie oben formatiert und sie in Listen an der gleichen Stelle zurücksetzen. Etwas wie:

 #while loop with open('values', 'r') as o: o.read("{}, {}, {}, {}, {}, {}, {}\n".format(FirstName[currentRow],Surname[currentRow], AnotherValue[currentRow], numberA, numberB)) currentRow +1 

Vielen Dank

4 Solutions collect form web for “Python-Lese aus Datei in mehrere Listen”

Ich denke, der beste entsprechende Weg, um es zu tun, ruft split auf den Text lesen in:

 FirstName[currentRow],Surname[currentRow], AnotherValue[currentRow], numberA, numberB = o.read().strip().split(", ") 

Es gibt kein echtes Äquivalent der formatierten Eingabe, wie scanf in C.

Du solltest so etwas wie folgendes machen können:

 first_names = [] surnames = [] another_values = [] number_as = [] number_bs = [] for line in open('values', 'r'): fn, sn, av, na, nb = line.strip().split(',') first_names.append(fn) surnames.append(sn) another_values.append(av) number_as.append(float(na)) number_bs.append(float(nb)) 

Die for line in open() Teil iteriert über jede Zeile in der Datei und die fn, sn, av, na, nb = line.strip().split(',') Bit Streifen die Newline \n aus dem Ende von jedem Line und teilt sie auf die Kommas.

In der Praxis würde ich aber wahrscheinlich das CSV-Modul oder so etwas wie Pandas benutzen, die die Randfälle besser behandeln. Zum Beispiel wird der oben genannte Ansatz brechen, wenn ein Name oder ein anderer Wert ein Komma hat!

 with open('values.txt', 'r') as f: first_names, last_names, another_values, a_values, b_values = \ (list(tt) for tt in zip(*[l.rstrip().split(',') for l in f])) 

Sofern Sie keine Aktualisierung benötigen, ist auch die Listenkonvertierungsliste list(tt) for tt in unnötig.

izip von itertools anstelle von zip .

Wenn Sie erlauben, das Dateiformat zu entscheiden, kann das Speichern und Laden als json-Format nützlich sein.

 import json #test data FirstName = range(5) Surname = range(5,11) AnotherValue = range(11,16) numberAvec = range(16,21) numberBvec = range(21,26) #save all = [FirstName,Surname,AnotherValue,numberAvec,numberBvec] with open("values.txt","w") as fp: json.dump(all,fp) #load with open("values.txt","r") as fp: FirstName,Surname,AnotherValue,numberAvec,numberBvec = json.load(fp) 

Values.txt:

 [[0, 1, 2, 3, 4], [5, 6, 7, 8, 9, 10], [11, 12, 13, 14, 15], [16, 17, 18, 19, 20], [21, 22, 23, 24, 25]] 
  • List slicing mit dynamischem Index auf [: index]
  • Gibt es eine Möglichkeit zu überprüfen, ob ein Artikel in einem Python-Tupel existiert?
  • Listenfilterung: Listenverstehen vs. Lambda + Filter
  • Druckwörter, die sich in einer Liste in Python befinden
  • Python: Alle Listenindizes löschen, die eine bestimmte Bedingung erfüllen
  • Einfügen in die Mitte einer doppelt verknüpften Liste - Python
  • Schneller Weg, um ein paar Elemente aus einer Liste / Warteschlange zu entfernen
  • Python Bool und int Vergleich und Indexierung auf Liste mit booleschen Werten
  • Mehr pythonische Art, einen JSON-String aus einer Liste von Tupeln zu formatieren
  • Poker Hand String Display
  • Zeichne eine 3D-Oberfläche aus einer Liste von Listen mit Matplotlib
  • Python ist die beste Programmiersprache der Welt.