Lesen und Schreiben von Listen in eine Datei in Python

Einleitung

Python-Programmierer verwenden Arrays, Listen und Wörterbücher intensiv als serialisierte Datenstrukturen. Das dauerhafte Speichern dieser Datenstrukturen erfordert entweder eine Datei oder eine Datenbank, um ordnungsgemäß zu funktionieren.

In diesem Artikel sehen wir uns an, wie man eine Liste in eine Datei schreibt und wie man diese Liste zurück in den Speicher liest.

Zu Daten in eine Datei schreibenUnd um Daten aus einer Datei lesen, bietet die Programmiersprache Python die Standardmethoden write() und read() für den Umgang mit einer einzelnen Zeile, sowie writelines() und readlines() für den Umgang mit mehreren Zeilen. Außerdem sind sowohl die pickle und dem json -Module erlauben auch clevere Möglichkeiten, mit serialisierten Datensätzen umzugehen.

Verwendung der lesen() und schreibe () Methoden

Umgang mit Zeichen (Strings) das Grundlegende read() und write() Methoden funktionieren hervorragend. Abspeichern einer solchen Liste zeilenweise in die Datei listfile.txt kann wie folgt erfolgen:


places = ['Berlin', 'Cape Town', 'Sydney', 'Moscow']

with open('listfile.txt', 'w') as filehandle:
    for listitem in places:
        filehandle.write(f'{listitem}n')

Das listitem wird um einen Zeilenumbruch erweitert "n", und dann in der Ausgabedatei gespeichert. Jetzt können wir uns ansehen, wie die gesamte Liste aus der Datei gelesen wird listfile.txt wieder in Erinnerung:


places = []


with open('listfile.txt', 'r') as filehandle:
    for line in filehandle:
        
        curr_place = line[:-1]
        
        places.append(curr_place)

Denken Sie daran, dass Sie den Zeilenumbruch am Ende der Zeichenfolge entfernen müssen. In diesem Fall hilft uns, dass Python auch Listenoperationen auf Strings zulässt. Dieses Entfernen wird einfach als Listenoperation für die Zeichenfolge selbst durchgeführt, die alles außer dem letzten Element behält. Dieses Element enthält das Zeichen "n" das den Zeilenumbruch auf UNIX/Linux-Systemen darstellt.

Verwendung der Schreibzeilen() und Lesezeilen() Methoden

Wie am Anfang 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. Lassen Sie uns die gesamte Liste in eine Datei auf der Festplatte schreiben:


places_list = ['Berlin', 'Cape Town', 'Sydney', 'Moscow']

with open('listfile.txt', 'w') as filehandle:
    filehandle.writelines(f"{place for place in places_list}n")

Um die gesamte Liste aus einer Datei auf der Festplatte zu lesen, müssen wir:


places = []


with open('listfile.txt', 'r') as filehandle:
    filecontents = filehandle.readlines()
    for line in filecontents:
        
        curr_place = line[:-1]
        
        places.append(curr_place)

Der obige Code folgt einem traditionelleren Ansatz, der von anderen Programmiersprachen übernommen wurde. Schreiben wir es in einem mehr Pythonisch Weg:


places = []


with open('listfile.txt', 'r') as filehandle:
    places = [current_place.rstrip() for current_place in filehandle.readlines()]

Zunächst wird der Dateiinhalt über gelesen readlines(). Zweitens in a for Schleife aus jeder Zeile wird das Zeilenumbruchzeichen mit entfernt rstrip() Methode. Drittens wird die Zeichenfolge als neues Listenelement zur Liste der Orte hinzugefügt.

Im Vergleich zu der obigen Auflistung ist der Code viel kompakter, aber möglicherweise für Python-Anfänger-Programmierer schwieriger zu lesen.

Verwenden des Joblib-Moduls

Die ersten bisher erläuterten Methoden speichern die Liste so, dass Menschen sie noch lesen können – im wahrsten Sinne des Wortes eine sequentielle Liste in einer Datei. Dies eignet sich hervorragend zum Erstellen einfacher Berichte oder zum Ausgeben von Exportdateien für Benutzer zur weiteren Verwendung, z. B. CSV-Dateien. Wenn Sie jedoch nur eine Liste in eine Datei serialisieren möchten, die später geladen werden kann, müssen Sie sie nicht in einem für Menschen lesbaren Format speichern.

Das joblib -Modul bietet die einfachste Möglichkeit, ein Python-Objekt zu sichern (es kann wirklich jedes Objekt sein):

import joblib

places = ['Berlin', 'Cape Town', 'Sydney', 'Moscow']

joblib.dump(places, 'places.sav')

places = joblib.load('places.sav')
print(places) 

joblib bleibt die einfachste und sauberste Möglichkeit, Objekte in einem effizienten Format zu serialisieren und später zu laden. Sie können jedes beliebige Format verwenden, wie z .sav, .data, usw. Es spielt keine Rolle – beides joblib und Alternativen wie pickle wird die Dateien gut lesen.

Verwendung der beizen Modul

Als Alternative zu joblib, wir können benutzen pickle! Es ist dump() -Methode speichert die Liste effizient als binären Datenstrom. Erstens die Ausgabedatei listfile.data wird für binäres Schreiben geöffnet ("wb"). Zweitens wird die Liste mithilfe von in der geöffneten Datei gespeichert dump() Verfahren:

import pickle

places = ['Berlin', 'Cape Town', 'Sydney', 'Moscow']

with open('listfile.data', 'wb') as filehandle:
    
    pickle.dump(places, filehandle)

Als nächsten Schritt lesen wir die Liste wie folgt aus der Datei. Erstens die Ausgabedatei listfile.data wird zum Lesen binär geöffnet ("rb"). Zweitens wird die Liste der Orte mithilfe von aus der Datei geladen load() Verfahren:

import pickle

with open('listfile.data', 'rb') as filehandle:
    
    placesList = pickle.load(filehandle)

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

Verwenden des JSON-Formats

Das binäre Datenformat pickle verwendet ist spezifisch für Python. Zur Verbesserung der Interoperabilität zwischen verschiedenen Programmen wird die JavaScript Object Notation (JSON) bietet ein benutzerfreundliches und für Menschen lesbares Schema und wurde daher sehr beliebt, um Dateien zu serialisieren und über APIs zu teilen.

Sehen Sie sich unseren praxisnahen, praktischen Leitfaden zum Erlernen von Git an, mit Best Practices, branchenweit akzeptierten Standards und einem mitgelieferten Spickzettel. Hören Sie auf, Git-Befehle zu googeln und tatsächlich in Verbindung, um es!

Das folgende Beispiel zeigt, wie Sie eine Liste gemischter Variablentypen mithilfe von in eine Ausgabedatei schreiben JSON Modul. Nachdem die Ausgabedatei zum Schreiben geöffnet wurde, wird die dump() -Methode speichert die Grundliste in der Datei mit der JSON-Notation:

import json


basic_list = [1, "Cape Town", 4.6]


with open('listfile.txt', 'w') as filehandle:
    json.dump(basic_list, filehandle)

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

import json


with open('listfile.txt', 'r') as filehandle:
    basic_list = json.load(filehandle)

Zusammenfassung

Verschiedene Methoden, die wir oben gezeigt haben, reichen vom einfachen Schreiben/Lesen von Daten bis hin zum Dumping/Laden von Daten über Binärströme mit Pickle und JSON. Dies vereinfacht das dauerhafte Speichern einer Liste und das Zurücklesen in den Speicher.

Zeitstempel:

Mehr von Stapelmissbrauch