Articles

Lesen und Schreiben von Listen in eine Datei in Python

Als serialisierte Datenstrukturen verwenden Python-Programmierer intensiv Arrays, Listen und Wörterbücher. Um diese Datenstrukturen dauerhaft zu speichern, ist entweder eine Datei oder eine Datenbank erforderlich. In diesem Artikel wird beschrieben, wie Sie eine Liste in eine Datei schreiben und diese Liste wieder in den Speicher einlesen.

Um Daten in eine Datei zu schreiben und Daten aus einer Datei zu lesen, bietet die Programmiersprache Python die Standardmethoden write() und read() für den Umgang mit einer einzelnen Zeile sowie writelines() und readlines() mit mehreren Zeilen. Darüber hinaus ermöglichen sowohl das pickle als auch das json Modul clevere Möglichkeiten, auch mit serialisierten Datensätzen umzugehen.

Verwenden der Lese- und Schreibmethoden

Um mit Zeichen (Strings) umzugehen, funktionieren die grundlegenden Methoden hervorragend. Das Abspeichern einer solchen Liste Zeile für Zeile in die Datei listfile.txt kann folgendermaßen erfolgen:

# define list of placesplaces = with open('listfile.txt', 'w') as filehandle: for listitem in places: filehandle.write('%s\n' % listitem)

In Zeile 6 wird die listitem erstens um einen Zeilenumbruch „\n“ erweitert und zweitens in der Ausgabedatei gespeichert. Um die gesamte Liste aus der Datei listfile zu lesen.txt zurück in den Speicher Dieser Python-Code zeigt Ihnen, wie es funktioniert:

# define an empty listplaces = # open file and read the content in a listwith open('listfile.txt', 'r') as filehandle: for line in filehandle: # remove linebreak which is the last character of the string currentPlace = line # add item to the list places.append(currentPlace)

Denken Sie daran, dass Sie den Zeilenumbruch vom Ende der Zeichenfolge entfernen müssen. In diesem Fall hilft es uns, dass Python auch Listenoperationen für Zeichenfolgen zulässt. In Zeile 8 des obigen Codes erfolgt diese Entfernung einfach als Listenoperation für die Zeichenfolge selbst, die alles außer dem letzten Element beibehält. Dieses Element enthält das Zeichen „\n“, das den Zeilenumbruch auf UNIX / Linux-Systemen darstellt.

Verwenden der writelines- und readlines-Methoden

Wie zu Beginn dieses Artikels erwähnt, enthält Python auch die beiden Methoden writelines() und readlines(), um mehrere Zeilen in einem Schritt zu schreiben bzw. zu lesen. Um die gesamte Liste in eine Datei auf der Festplatte zu schreiben, lautet der Python-Code wie folgt:

# define list of placesplaces_list = with open('listfile.txt', 'w') as filehandle: filehandle.writelines("%s\n" % place for place in places_list)

Um die gesamte Liste aus einer Datei auf der Festplatte zu lesen, lautet der Python-Code wie folgt:

# define empty listplaces = # open file and read the content in a listwith open('listfile.txt', 'r') as filehandle: filecontents = filehandle.readlines() for line in filecontents: # remove linebreak which is the last character of the string current_place = line # add item to the list places.append(current_place)

Die obige Auflistung folgt einem traditionelleren Ansatz, der von anderen Programmiersprachen übernommen wurde. Um es pythonischer zu schreiben, schauen Sie sich den folgenden Code an:

# define empty listplaces = # open file and read the content in a listwith open('listfile.txt', 'r') as filehandle: places = 

Nachdem Sie die Datei listfile.txt in Zeile 5 geöffnet haben, erfolgt die Wiederherstellung der Liste vollständig in Zeile 6. Zunächst wird der Dateiinhalt über readlines() gelesen. Zweitens wird in einer for -Schleife aus jeder Zeile das Zeilenumbruchzeichen mit der rstrip() -Methode entfernt. Drittens wird die Zeichenfolge als neues Listenelement zur Liste der Orte hinzugefügt. Im Vergleich zur vorherigen Auflistung ist der Code viel kompakter, kann jedoch für Anfänger von Python-Programmierern schwieriger zu lesen sein.

Mit dem Pickle-Modul

Die verschiedenen bisher erläuterten Methoden speichern die Liste so, dass Menschen sie noch lesen können. Falls dies nicht benötigt wird, kann das Pickle-Modul für Sie sehr praktisch sein. Die dump() -Methode speichert die Liste effizient als binären Datenstrom. Zunächst wird in Zeile 7 (im Code unten) die Ausgabedatei listfile.data zum binären Schreiben geöffnet („wb“). Zweitens wird in Zeile 9
Die Liste mit der Methode dump() in der geöffneten Datei gespeichert.

# load additional moduleimport pickle# define a list of placesplacesList = with open('listfile.data', 'wb') as filehandle: # store the data as binary data stream pickle.dump(placesList, filehandle)

Im nächsten Schritt lesen wir die Liste wie folgt aus der Datei. Zunächst wird die Ausgabedatei listfile.data binär zum Lesen („rb“) in Zeile 4 geöffnet. Zweitens wird die Liste der Orte mit der Methode load() aus der Datei geladen.

# load additional moduleimport picklewith open('listfile.data', 'rb') as filehandle: # read the data as binary data stream placesList = pickle.load(filehandle)

Die beiden Beispiele hier zeigen die Verwendung von Strings. pickle funktioniert jedoch mit allen Arten von Python-Objekten wie Zeichenfolgen, Zahlen, selbstdefinierten Strukturen und jeder anderen integrierten Datenstruktur, die Python bereitstellt.

Verwendung des JSON-Formats

Das binäre Datenformat, das pickle verwendet, ist spezifisch für Python. Um die Interoperabilität zwischen verschiedenen Programmen zu verbessern, bietet die JavaScript Object Notation (JSON) ein einfach zu bedienendes und für Menschen lesbares Schema und wurde daher sehr beliebt.

Das folgende Beispiel zeigt, wie eine Liste gemischter Variablentypen mit dem json-Modul in eine Ausgabedatei geschrieben wird. In Zeile 4 wird die Basisliste definiert. Nach dem Öffnen der Ausgabedatei zum Schreiben in Zeile 7 speichert die dump() -Methode die Basisliste in der Datei unter Verwendung der JSON-Notation.

import json# define list with valuesbasicList = # open output file for writingwith open('listfile.txt', 'w') as filehandle: json.dump(basicList, filehandle)

Das Zurücklesen des Inhalts der Ausgabedatei in den Speicher ist so einfach wie das Schreiben der Daten. Die entsprechende Methode zu dump() heißt load() und funktioniert wie folgt:

import json# open output file for readingwith open('listfile.txt', 'r') as filehandle: basicList = json.load(filehandle)

Fazit

Die verschiedenen oben gezeigten Methoden reichen vom einfachen Schreiben / Lesen von Daten bis zum Dumping / Laden von Daten über Binärströme mit Pickle und JSON. Dies vereinfacht das persistente Speichern einer Liste und das Zurücklesen in den Speicher.

Danksagung

Die Autorin bedankt sich bei Zoleka Hatitongwe für ihre Unterstützung bei der Vorbereitung des Artikels.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.