Umgang mit Dateien in Python

Die Bearbeitung von Dateien ist ein grundlegender Aspekt in jeder Programmiersprache. Python bietet umfangreiche Möglichkeiten, um mit Dateien in verschiedenen Modi zu interagieren – beispielsweise zum Lesen, Schreiben und Anhängen.

Nach dieser Anleitung wirst Du in der Lage sein:

  • Dateien in Python zu öffnen und zu analysieren,
  • Zeilen aus Textdateien auszulesen,
  • Inhalte in Dateien zu schreiben und anzufügen, und
  • Kontextmanager für die Arbeit mit Dateien in Python zu nutzen.

Wie man Dateien in Python liest

Um eine Datei in Python zu öffnen, verwendest Du die allgemeine Syntax: open('dateiname', 'modus').

  • dateiname ist hier der Name der Datei.

Hinweis: Befindet sich die Datei im aktuellen Arbeitsverzeichnis, reicht es, den Dateinamen anzugeben. Liegt sie in einem anderen Ordner, musst Du den Pfad zur Datei angeben.

  • Der Parameter modus definiert, in welchem Modus die Datei geöffnet werden soll.

Der Standardmodus zum Öffnen einer Datei ist das Lesen, was durch den Buchstaben „r“ gekennzeichnet wird. Es ist empfehlenswert, den Modus explizit anzugeben.

Bevor wir anfangen, werfen wir einen Blick auf die Datei lib.txt, die wir in diesem Beispiel verwenden werden.

📁 Lade die Textdatei und den Code, der in diesem Tutorial verwendet wird, aus diesem GitHub-Repository herunter.

Das folgende Codebeispiel demonstriert, wie man die Textdatei „lib.txt“ mit der Funktion open() öffnet und deren Inhalt liest.

file = open('lib.txt','r')
contents = file.read()
print(contents)
file.close()

# Ausgabe
Hello, there!
Here are a few helpful Python libraries:
1) NumPy
2) pandas
3) matplotlib
4) seaborn
5) scikit-learn
6) BeautifulSoup
7) Scrapy
8) nltk
9) Bokeh
10) statsmodels

In dem obigen Beispiel:

  • Gibt die Funktion open() ein Dateiobjekt zurück, das wir hier als file bezeichnen.
  • Anschließend rufen wir die Methode read() für die Datei auf.
  • Die Variable contents enthält jetzt den Inhalt der Datei. Diesen geben wir dann aus.
  • Abschließend schließen wir die Datei.

Vergisst Du jedoch, die Datei zu schließen, können Ressourcen verschwendet werden. Wenn Du mit vielen Dateien arbeitest, kann dies zu einem erheblichen Speicherverbrauch führen. Dies liegt daran, dass mehrere Dateien offen bleiben, ohne dass sie geschlossen werden.

Lass uns nun eine bessere Methode zum Öffnen von Dateien mit Hilfe von Kontextmanagern kennenlernen. Das folgende Codebeispiel zeigt, wie sie verwendet werden.

with open('lib.txt','r') as f:
  contents = f.read()
  print(contents)

Wenn Du Kontextmanager für die Dateiverarbeitung verwendest, ist es nicht notwendig, die Methode close() manuell aufzurufen. Die Dateien werden automatisch geschlossen, sobald die I/O-Operation abgeschlossen ist.

Wie man Zeilen aus Dateien in Python liest

In unserer Beispieldatei hatten wir nur wenige Zeilen. Das Lesen des gesamten Dateiinhalts auf einmal war daher kein Problem.

Wenn Du jedoch mit großen Dateien arbeiten musst, ist die Verwendung der read()-Methode, wie oben gezeigt, möglicherweise nicht effizient.

Bei sehr großen Textdateien kann es sogar vorkommen, dass der Speicherplatz knapp wird. Aus diesem Grund kann es sinnvoll sein, Zeilen aus einer Textdatei zeilenweise zu lesen. In diesem Abschnitt erfährst Du, wie das geht.

Verwendung der readline()-Methode von Python zum Lesen von Zeilen aus einer Datei

Die Methode readline() liest jeweils eine Zeile aus der Datei.

Führe das folgende Codebeispiel aus.

with open('lib.txt','r') as f:
  line = f.readline()
  print(line)
  line = f.readline()
  print(line)

# Ausgabe
Hello, there!

Here are a few helpful Python libraries:

Du siehst, dass nach dem ersten Aufruf der readline()-Methode die erste Zeile der Datei ausgegeben wird. Der zweite Aufruf gibt die zweite Zeile der Datei zurück.

Denn nach dem ersten Methodenaufruf befindet sich der Dateizeiger am Anfang der zweiten Zeile.

In Python kannst Du die Methode tell() verwenden, um die aktuelle Position des Dateizeigers abzurufen. Und um den Dateizeiger an eine bestimmte Stelle zu verschieben, kannst Du die Methode seek() verwenden.

Im folgenden Codeausschnitt verwenden wir f.seek(0) nach dem ersten Methodenaufruf. Dadurch wird der Dateizeiger an den Anfang der Textdatei gesetzt. Daher wird in beiden Fällen die erste Zeile der Datei ausgegeben.

with open('lib.txt','r') as f:
  line = f.readline()
  print(line)
  f.seek(0)
  line = f.readline()
  print(line)

# Ausgabe
Hello, there!

Hello, there!

Verwendung der readlines()-Methode von Python zum Lesen von Zeilen aus einer Datei

Es gibt eine weitere verwandte Methode namens readlines().

Wenn Du das folgende Codebeispiel ausführst, siehst Du, dass die Methode readlines() eine Liste aller Zeilen in der Datei zurückgibt.

with open('lib.txt','r') as f:
  lines = f.readlines()
  print(lines)

# Ausgabe
['Hello, there!\n', 'Here are a few helpful Python libraries:\n', '1) NumPy\n', '2) pandas\n', '3) matplotlib\n', '4) seaborn\n', '5) scikit-learn\n', '6) BeautifulSoup\n', '7) Scrapy\n', '8) nltk\n', '9) Bokeh\n', '10) statsmodels\n', '\n']

Verwendung der for-Schleife von Python zum Lesen von Zeilen aus einer Datei

Um Zeilen aus einer Textdatei zu lesen, kannst Du auch eine for-Schleife verwenden.

Sobald Du ein Dateiobjekt hast, kannst Du mit der for-Schleife den Inhalt der Datei Zeile für Zeile durchlaufen und ausgeben, wie unten gezeigt. Beachte, dass wir jeweils nur auf eine Zeile zugreifen und nicht den gesamten Inhalt der Datei laden.

with open('lib.txt','r') as f:
  for line in f:
    print(line, end='')

Hinweis: Wenn Du die print()-Funktion von Python verwendest, ist das Standardtrennzeichen ein Zeilenumbruch (\n). In der Originaldatei haben wir jedoch keine zusätzlichen Zeilenumbrüche. Setze also das end-Argument auf einen leeren String (end=''), um den Inhalt der Datei originalgetreu auszugeben.

Wie man Inhaltsblöcke aus Dateien in Python liest

In Python kannst Du den Inhalt der Datei auch in Form kleiner Blöcke einlesen.

Betrachte den folgenden Code:

  • Wir setzen hier die chunk_size auf 50. Dies bedeutet, dass die ersten 50 Zeichen der Datei gelesen und ausgegeben werden.
  • Rufe nun die Methode tell() für das Dateiobjekt f auf. Du wirst sehen, dass sich der Dateizeiger jetzt an Position 51 befindet – wie erwartet.
chunk_size = 50
with open('lib.txt','r') as f:
  chunk = f.read(chunk_size)
  print(chunk)
  current = f.tell()
  print(f"Current position of file pointer: {current}")

# Ausgabe
Hello, there!
Here are a few helpful Python librar
Current position of file pointer: 51

Du kannst diese Technik auch nutzen, um die gesamte Datei in kleinen Blöcken einzulesen.

Das folgende Codebeispiel demonstriert dies:

chunk_size = 50
with open('lib.txt','r') as f:
  chunk = f.read(chunk_size)
  print(chunk,end='')

  while(len(chunk)>0):
    chunk = f.read(chunk_size)
    print(chunk,end='')

# Ausgabe
Hello, there!
Here are a few helpful Python libraries:
1) NumPy
2) pandas
3) matplotlib
4) seaborn
5) scikit-learn
6) BeautifulSoup
7) Scrapy
8) nltk
9) Bokeh
10) statsmodels

Hier verwenden wir eine while-Schleife, um den Inhalt der Datei zu lesen. Wir lesen den Inhalt der Datei in Blöcken von je 50 Zeichen, bis wir das Ende der Datei erreichen. ✅

Wie man in Python in eine Datei schreibt

Um in Python in eine Textdatei zu schreiben, solltest Du sie im Schreibmodus öffnen, indem Du 'w' angibst.

Das folgende Codebeispiel zeigt, wie das funktioniert.

with open('new_file.txt','w') as f:
  f.write('Hello, Python!')

Du wirst feststellen, dass die Datei new_file.txt in Deinem Arbeitsverzeichnis erstellt wurde.

Führe nun die obige Codezelle erneut aus.

Führe in Deinem Terminal den folgenden Befehl aus:

cat new_file.txt

# Ausgabe: Hello, Python!

Idealerweise haben wir zweimal in die Datei geschrieben. Also hätte „Hello, Python!“ zweimal ausgegeben werden müssen, oder?

Du siehst jedoch, dass es nur einmal ausgegeben wird. Das liegt daran, dass beim Öffnen einer Datei im Schreibmodus ('w') der Inhalt der Datei im Grunde mit neuem Inhalt überschrieben wird.

Wenn Du am Ende der Datei etwas hinzufügen möchtest, ohne den vorhandenen Inhalt zu überschreiben, solltest Du die Datei im Anhängemodus öffnen. Wie das geht, erfährst Du im nächsten Abschnitt.

Wie man in Python an eine Datei anhängt

Wenn Du Inhalte an eine Datei anhängen möchtest, ohne sie zu überschreiben, öffne sie im Anhängemodus.

Verwende dafür 'a'a für append – und gib den Modus explizit an.

Führe als Nächstes die folgende Codezelle zweimal aus.

with open('new_file.txt','a') as f:
  f.write('Hello, Python!')

Beachte, wie der Text jetzt zweimal ausgegeben wird, da wir ihn an die Datei angehängt haben.

cat new_file.txt

# Ausgabe: Hello, Python!Hello, Python!

Zusammenfassung

Lass uns kurz zusammenfassen, was wir in dieser Anleitung besprochen haben.

  • Du hast die grundlegenden Datei-I/O-Operationen wie Lesen, Schreiben und Anhängen an eine Datei kennengelernt.
  • Du hast auch gelernt, wie man die Methode seek() verwendet, um den Dateizeiger an eine bestimmte Position zu verschieben, und
  • wie man die Methode tell() verwendet, um die aktuelle Position des Dateizeigers abzurufen.

Ich hoffe, diese Anleitung war hilfreich für Dich. Nachdem Du nun gelernt hast, wie man mit Textdateien in Python arbeitet, erfährst Du, wie man mit JSON-Dateien in Python umgeht.

Verwandt:

Wie man die Länge einer Liste in Python in 3 Schritten bestimmt.