Wie man mit unformatierten Textdateien in Python 3 umgeht
Einführung
Python ist ein großartiges Werkzeug zur Verarbeitung von Daten. Einige der häufigsten Aufgaben in der Programmierung bestehen darin, Daten zu lesen, zu schreiben oder zu manipulieren. Aus diesem Grund ist es besonders nützlich zu wissen, wie man mit verschiedenen Dateiformaten umgeht, die unterschiedliche Arten von Daten speichern.
Zum Beispiel sollten Sie ein Python-Programm in Betracht ziehen, das eine Liste von Benutzern auf Zugriffssteuerung überprüft. Ihre Benutzerliste könnte als Textdatei gespeichert werden, sodass Sie den Zugriff überprüfen oder Berechtigungen ändern können. Mit Python wird Ihnen die Fähigkeit, Dateien zu öffnen, daraus zu lesen, in sie zu schreiben und sie zu schließen, helfen, solche Aufgaben zu bewältigen.
Dieses Tutorial beschreibt kurz einige der Dateiformate, die Python verarbeiten kann. Nach einer kurzen Einführung in diese Formate lernen Sie, wie man eine Textdatei in Python 3 öffnet, liest und schreibt. Nachdem Sie fertig sind, werden Sie in der Lage sein, jede Textdatei in Python zu verarbeiten.
Voraussetzungen
Für dieses Tutorial sollten Sie Python 3 installiert haben sowie eine lokale Programmierumgebung auf Ihrem Computer eingerichtet sein. Wenn dies nicht der Fall ist, können Sie sich einrichten, indem Sie den entsprechenden Installations- und Einrichtungsleitfaden für Ihr Betriebssystem befolgen:
- Ubuntu 22.04 oder Debian 8
- CentOS 7
- Mac OS X
- Windows 10
Hintergrund
Python ist sehr flexibel und kann eine Vielzahl von unterschiedlichen Dateiformaten problemlos verarbeiten, darunter, aber nicht beschränkt auf die folgenden:
| Dateityp | Beschreibung |
|---|---|
| Einfacher Text | Textdateien speichern Daten, die nur Zeichen (oder Strings) repräsentieren und strukturierte Metadaten ausschließen. |
| CSV | Durch Komma-separierte Werte-Dateien werden Kommas (oder andere Trennzeichen) verwendet, um gespeicherten Daten eine Struktur zu geben, wodurch Daten im Tabellenformat gespeichert werden können. |
| HTML | Hypertext-Markup-Language-Dateien speichern strukturierte Daten, die dazu bestimmt sind, von einem Browser angezeigt zu werden, und werden häufig mit Websites verwendet. |
| JSON | JavaScript Object Notation ist ein einfaches und effizientes Format, das es zu einem der am häufigsten verwendeten Formate macht, um strukturierte Daten zu speichern und zu übertragen. |
Dieses Tutorial konzentriert sich auf die Arbeit mit reinen Text-Dateien.
Schritt 1 — Eine Textdatei erstellen
Bevor wir mit der Arbeit in Python beginnen können, müssen wir sicherstellen, dass wir eine Datei haben, mit der wir arbeiten können. Öffnen Sie dazu Ihren Code-Editor und erstellen Sie eine neue Textdatei mit dem Namen days.txt.
Geben Sie in die neue Datei einige Zeilen Text ein, in denen die Wochentage aufgelistet sind:
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday
Als nächstes speichern Sie Ihre Datei und notieren Sie sich ihren Speicherort. In diesem Beispiel hat unser Benutzer sammy die Datei hier als /home/sammy/days.txt gespeichert. Dies wird in späteren Schritten, in denen wir die Datei in Python öffnen, sehr wichtig sein.
Jetzt, da Sie eine Datei zum Verarbeiten haben, können Sie mit dem Programmieren beginnen.
Schritt 2 — Eine Datei öffnen
Erstelle in deinem Code-Editor eine neue Python-Datei und nenne sie files.py.
Um eine Datei in Python zu öffnen, müssen wir zunächst eine Möglichkeit finden, die Datei auf der Festplatte mit einer Variablen in Python zu verknüpfen. Dieser Prozess wird als Öffnen einer Datei bezeichnet, und die Variable wird als Dateihandle bezeichnet. Wir beginnen damit, Python mitzuteilen, wo sich die Datei befindet. Der Standort Ihrer Datei wird oft als Dateipfad bezeichnet — /home/sammy/days.txt in diesem Beispiel. Erstellen Sie eine Variable, um diese Pfadinformationen zu speichern.
path = '/home/sammy/days.txt'
Jetzt können Sie die open()-Funktion von Python verwenden, um unsere days.txt-Datei zu öffnen. Die open()-Funktion benötigt den Dateipfad als ihr erstes Argument. Die Funktion akzeptiert auch viele andere Parameter. Am wichtigsten ist jedoch der optionale mode-Parameter. Dies ist eine optionale Zeichenfolge, die den Modus angibt, in dem die Datei geöffnet wird. Der Modus, den Sie wählen, hängt davon ab, was Sie mit der Datei tun möchten. Hier sind einige der verfügbaren Modi:
- 'r': zum Lesen aus einer Datei verwenden
- 'w': zum Schreiben in eine Datei verwenden
- 'a' : zum Anhängen an eine Datei verwenden
- 'r+' : verwenden, um sowohl zu lesen als auch in dieselbe Datei zu schreiben
In diesem Beispiel möchten wir nur aus der Datei lesen, also verwenden wir den 'r' Modus. Verwenden Sie die Funktion open(), um die Datei days.txt zu öffnen und weisen Sie den resultierenden Dateihandle der Variablen days_file zu.
days_file = open(path, 'r')
Nachdem Sie die Datei geöffnet haben, wird der nächste Schritt Sie durch das Lesen des Inhalts führen.
Schritt 3 — Eine Datei lesen
Seit unsere Datei geöffnet ist, können wir sie jetzt über die Variable, der sie zugewiesen wurde, manipulieren (d.h. von ihr lesen). Python bietet drei verwandte Operationen zum Lesen von Informationen aus einer Datei. Lassen Sie uns einen Moment Zeit nehmen, um zu verstehen, wie jede von ihnen funktioniert.
Verwenden von read
Die erste Operation read() gibt den gesamten Inhalt der Datei als einen einzigen String zurück. Zum Beispiel:
days_file.read()
Das Ergebnis wäre:
'Monday\nTuesday\nWednesday\nThursday\nFriday\nSaturday\nSunday\n'
Hinweis: Das \n in der obigen Zeichenkette repräsentiert ein Zeilenumbruch-Zeichen. Bei direkter Interaktion mit Python (wie Sie es tun könnten, wenn Sie einfach python von der Eingabeaufforderung aus ausführen), wird \n verwendet, um Zeilenumbrüche anzuzeigen. Sie können es auch verwenden, um einen neuen Zeilenumbruch darzustellen, wenn Sie Ihre eigenen Zeichenfolgen erstellen.
Verwendung von readline
Die zweite Operation readline() gibt die nächste Zeile der Datei zurück und liefert den Text bis einschließlich des nächsten Zeilenumbruchs. Einfacher ausgedrückt, diese Operation liest eine Datei zeilenweise.
days_file.readline()
Das Ergebnis wäre:
'Monday\n'
Sobald Sie eine Zeile mit der readline-Operation lesen, wird der aktuelle Punkt, an dem die Datei gelesen wird, zur nächsten Zeile verschoben. Wenn Sie diese Operation erneut aufrufen würden, würde die nächste Zeile in der Datei zurückgegeben werden, wie folgt:
days_file.readline()
'Tuesday\n'
Verwendung von readlines
Die letzte Operation, readlines(), gibt eine Liste der Zeilen in der Datei zurück, wobei jedes Element der Liste eine einzelne Zeile darstellt.
days_file.readlines()
['Monday\n', 'Tuesday\n', 'Wednesday\n', 'Thursday\n', 'Friday\n', 'Saturday\n', 'Sunday\n']
Etwas, das Sie beachten sollten, wenn Sie aus Dateien lesen: Sobald eine Datei mit einer der Leseoperationen gelesen wurde, kann sie nicht erneut gelesen werden. Wenn Sie beispielsweise zuerst days_file.read() ausführen und dann days_file.readlines(), würde die zweite Operation einen leeren String zurückgeben. Daher müssen Sie jedes Mal, wenn Sie aus einer Datei lesen möchten, entweder eine neue Dateivariablen öffnen oder die seek()-Methode verwenden, was über den Rahmen dieses Tutorials hinausgeht. Wenn Sie mehr erfahren möchten, hat Python hervorragende Dokumentationen zu diesen Methoden.
Jetzt, wo wir aus einer Datei gelesen haben, lassen Sie uns lernen, wie man in eine neue Datei schreibt.
Schritt 4 — Eine Datei schreiben
In diesem Schritt werden Sie eine neue Datei schreiben, die den Titel Wochentage enthält, gefolgt von dem Inhalt der ersten Datei. Zuerst erstellen Sie eine title Variable.
title = 'Days of the Week\n'
Sie müssen auch die Wochentage in einer Variablen speichern, die wir days nennen werden. Dieser Code öffnet die Datei im Lesemodus, liest die Datei und speichert die zurückgegebene Ausgabe der Leseoperation in unserer neuen Variable days. Um es leichter verständlich zu machen, ist der Code aus Schritt 2 enthalten.
path = '/home/sammy/days.txt'
days_file = open(path, 'r')
days = days_file.read()
Jetzt, da Sie Variablen für den Titel und die Wochentage haben, können Sie beginnen, in Ihre neue Datei zu schreiben. Zuerst geben Sie den Speicherort der Datei an. Wieder verwenden wir das Verzeichnis /home/sammy/, sodass unser Pfad /home/sammy/new_days.txt sein wird. Sie können dann die neue Datei im Schreibmodus öffnen, indem Sie die Funktion open() mit dem Modus 'w' angeben.
new_path = '/home/sammy/new_days.txt'
new_days = open(new_path, 'w')
Hinweis: Es ist wichtig zu beachten, dass, wenn new_days.txt bereits existiert, bevor die Datei geöffnet wird, der alte Inhalt überschrieben wird. Seien Sie also vorsichtig beim Verwenden des 'w' Modus!
Sobald die neue Datei geöffnet ist, können Sie Daten mit der write()-Methode hinzufügen. Diese Methode nimmt einen einzelnen String-Parameter entgegen und schreibt diese Daten in die Datei. Wenn Sie in der Datei eine neue Zeile beginnen möchten, müssen Sie das Zeilenumbruchzeichen, \n, explizit angeben, das enthalten war, als Sie 'Days of the Week\n' der Variablen title zugewiesen haben.
Schreibe den Titel in die Datei, gefolgt von den Wochentagen. Es kann hilfreich sein, einige print-Anweisungen hinzuzufügen, um anzuzeigen, was wir in die Datei schreiben, was oft zur Verfolgung des Fortschritts deiner Skripte verwendet wird.
new_days.write(title)
print(title)
new_days.write(days)
print(days)
Abschließend ist es wichtig, eine Datei zu schließen, sobald Sie mit ihr fertig sind.
Schritt 5 — Eine Datei schließen
Das Schließen einer Datei stellt sicher, dass die Verbindung zwischen der Datei auf der Festplatte und dem Dateihandle beendet ist. Das Schließen von Dateien gewährleistet auch, dass andere Programme darauf zugreifen können und schützt Ihre Daten. Wenn Sie keine with-Anweisungen wie in Schritt 6 beschrieben verwenden, stellen Sie immer sicher, dass Sie Ihre Dateien schließen. Schließen Sie in diesem Beispiel alle unsere Dateien mit der close()-Methode.
days_file.close()
new_days.close()
Jetzt, da das Skript die Dateien fertig verwendet hat, gibt es die Dateihandles mit der Methode close() frei.
Schritt 6 — Verwendung von with Anweisungen (Optional)
Die empfohlene Methode, um in Python mit Dateien zu arbeiten (oft als die pythonsich Methode bezeichnet), ist die Verwendung eines Sprachmerkmals, das als with Anweisungen bekannt ist. Diese Anweisungen sind Abkürzungen, um einen Kontext einzurichten, in dem die Arbeit erledigt wird und, sobald dieser Kontext beendet ist, werden die letzten Details automatisch geregelt, um häufige Fehler zu vermeiden. Im Fall der Arbeit mit Dateien wird eine with Anweisung die Datei automatisch schließen, sodass Sie keine offenen Datei-Handles haben, nachdem Sie Ihre Aufgabe abgeschlossen haben.
Wie bei jedem Block in Python, wie Funktionsdefinitionen, if-Anweisungen oder Schleifen, haben with-Anweisungen die Form einer einfachen Anweisung, gefolgt von einem : und einem Block von eingerücktem Code. Hier ist ein Beispiel für Code, der eine Datei öffnet und deren Inhalt ausgibt:
with open('/home/sammy/days.txt', 'r') as days_file:
days = days_file.read()
print(days)
Lassen Sie uns Schritt für Schritt durchgehen, was dieser Code macht. Wie zuvor öffnen wir die Datei mit Pythons integrierter open()-Funktion, indem wir den Dateipfad und die Modusparameter übergeben. Da wir jedoch die with-Anweisung verwenden, weisen wir den resultierenden Datei-Handle nicht einer Variablen mit = zu, sondern verwenden das as-Schlüsselwort. Dies ist Teil der vollständigen Syntax der with-Anweisung:
with action as result:
. . .
Nach dem : gehen wir zur nächsten Zeile und rücken unseren Code ein, was die Art und Weise ist, wie Python Funktionsblöcke organisiert. Wie zuvor haben wir Zugriff auf den Datei-Handle in der days_file Variablen, sodass wir die read() Methode aufrufen können, um den gesamten Inhalt zu erhalten und ihn mit print() auszugeben.
Beachte, dass hier keine close()-Methode aufgerufen wird. Das liegt daran, dass, sobald der Code diesen Block verlässt (das heißt, sobald die nächste Codezeile nicht eingerückt ist oder die Datei endet), der Kontext des with-Statements automatisch weiß, dass diese Dateien geschlossen werden müssen. Der Vorteil dabei ist nicht nur, dass du dir nicht merken musst, deine Dateien jedes Mal zu schließen, sondern auch, dass die gesamte Logik, die du für die Bearbeitung dieser speziellen Datei benötigst, visuell und logisch klar innerhalb dieses Blocks abgegrenzt ist. Diese Struktur hilft, deinen Code sauber und leserlich zu halten.
Vor diesem Hintergrund lassen Sie uns unseren vorherigen Code unter Verwendung der with-Anweisung umschreiben:
with open(path, 'r') as days_file, open(new_path, 'w') as new_days:
days = days_file.read()
new_days.write(title)
new_days.write(days)
print(title)
print(days)
Jetzt ist der Code viel organisierter. Wir beginnen wie zuvor damit, einige Variablen zu definieren: die Pfade unserer beiden Dateien und den Titel, den wir für die Überschrift der neuen Datei verwenden werden. Danach beginnen wir unsere with-Anweisung, öffnen unsere beiden Dateien und speichern ihre Verbindungen in entsprechend benannten Variablen. Wie zuvor lesen wir den Inhalt von days_file und schreiben dann den Titel und diesen Inhalt in new_days. Schließlich beenden wir den Block, indem wir unseren Code nach links einrücken, um die Werte von title und days auszugeben, die wir gelesen haben.
Hinweis: Im Gegensatz zu einigen anderen Blöcken in Python sind Variablen, die innerhalb von with-Blöcken definiert werden, außerhalb dieses Geltungsbereichs verfügbar.
Während es einige Fälle gibt, in denen Sie die close()-Methode verwenden möchten, wie zuvor beschrieben, und es wichtig ist zu wissen, wie sie funktioniert, werden Sie am häufigsten with-Anweisungen verwenden, wenn Sie mit Dateien in Python arbeiten.
Schritt 7 — Überprüfung unseres Codes
Bevor Sie Ihren Code ausführen, ist es eine gute Idee, sicherzustellen, dass alles korrekt erscheint. Das Endprodukt sollte etwa so aussehen:
path = '/home/sammy/days.txt'
new_path = '/home/sammy/new_days.txt'
title = 'Days of the week\n'
with open(path, 'r') as days_file, open(new_path, 'w') as new_days:
days = days_file.read()
new_days.write(title)
new_days.write(days)
print(title)
print(days)
Nachdem Sie Ihren Code gespeichert haben, öffnen Sie das Terminal und führen Sie Ihr Python-Skript wie folgt aus:
- python files.py
Die Ausgabe wird wie folgt sein:
Days of the Week
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday
Überprüfen Sie nun, ob der Code vollständig funktioniert, indem Sie die neue Datei (new_days.txt) öffnen. Wenn alles gut gelaufen ist, sollte sie Folgendes enthalten:
Days of the Week
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday
Schlussfolgerung
In diesem Tutorial haben wir durchgemacht, wie man einfache Textdateien in Python 3 handhabt und bearbeitet. Jetzt kannst du Dateien in Python öffnen, lesen, schreiben und schließen, und du kannst weiterhin mit deinen eigenen Daten in Python arbeiten. Python bietet viele andere hilfreiche Methoden beim Arbeiten mit Eingabe und Ausgabe und stellt auch Dokumentation zur Verfügung, um mehr zu lernen.
