Python File I/O

Table of Contents

 

In diesem Tutorial erfahren Sie mehr über Python-Dateioperationen. Genauer gesagt, das Öffnen einer Datei, das Lesen aus ihr, das Schreiben in sie, das Schließen und verschiedene Dateimethoden, die Sie kennen sollten.

 

Files

Dateien sind benannte Speicherorte auf der Festplatte, um zugehörige Informationen zu speichern. Sie dienen dazu, Daten dauerhaft in einem nichtflüchtigen Speicher (z. B. Festplatte) zu speichern.

Da Random Access Memory (RAM) flüchtig ist (das seine Daten verliert, wenn der Computer ausgeschaltet wird), verwenden wir Dateien für die zukünftige Verwendung der Daten, indem wir sie dauerhaft speichern.

Wenn wir aus einer Datei lesen oder in eine Datei schreiben möchten, müssen wir sie zuerst öffnen. Wenn wir fertig sind, muss es geschlossen werden, damit die Ressourcen, die mit der Datei verbunden sind, freigegeben werden.

Daher findet in Python eine Dateioperation in der folgenden Reihenfolge statt:

 

  1. Öffne einen File
  2. Lesen oder schreiben (Vorgang ausführen)
  3. Schließen Sie die Datei

 


 

 

Opening Files in Python

 

Python hat eine built-in open() Funktion zum Öffnen einer Datei. Diese Funktion gibt ein Dateiobjekt, auch Handle genannt, zurück, da es verwendet wird, um die Datei entsprechend zu lesen oder zu ändern.

 

>>> f = open("test.txt")    # Datei im aktuellen Verzeichnis öffnen
>>> f = open("C:/Python38/README.txt")  # Angabe des vollständigen Pfads

 

Wir können den Modus beim Öffnen einer Datei angeben. Im Modus geben wir an, ob wir lesen wollen r, schreiben w oder anhängen a zur Datei. Wir können auch angeben, ob wir die Datei im Textmodus oder im Binärmodus öffnen möchten.

Die Vorgabe ist das Lesen im Textmodus. In diesem Modus erhalten wir beim Lesen aus der Datei Strings.

Andererseits gibt der Binärmodus Bytes zurück, und dies ist der Modus, der verwendet werden sollte, wenn es sich um Nicht-Textdateien wie Bilder oder ausführbare Dateien handelt.

 

Mode Description
r Öffnet eine Datei zum Lesen. (Standard)
w Öffnet eine Datei zum Schreiben. Erstellt eine neue Datei, wenn sie nicht vorhanden ist, oder schneidet die Datei ab, wenn sie vorhanden ist.
x Öffnet eine Datei zur exklusiven Erstellung. Wenn die Datei bereits vorhanden ist, schlägt der Vorgang fehl.
a Öffnet eine Datei zum Anhängen am Ende der Datei, ohne sie zu kürzen. Erstellt eine neue Datei, wenn sie nicht existiert.
t Öffnet im Textmodus. (Standard)
b Öffnet im Binärmodus.
+ Öffnet eine Datei zum Aktualisieren (lesen und schreiben)

 

f = open("test.txt")      # Äquivalent zu 'r' oder 'rt'
f = open("test.txt",'w')  # im Textmodus schreiben
f = open("img.bmp",'r+b') # Lesen und Schreiben im Binärmodus

 

Im Gegensatz zu anderen Sprachen, der Charakter a impliziert nicht die Zahl 97, bis sie mit kodiert wird ASCII (oder andere äquivalente Kodierungen).

 

Darüber hinaus ist die Standardcodierung plattformabhängig. In Fenstern ist es cp1252 aber utf-8 unter Linux.

Wir müssen uns also nicht auch auf die Standardcodierung verlassen, sonst verhält sich unser Code auf verschiedenen Plattformen anders.

Wenn Sie mit Dateien im Textmodus arbeiten, wird daher dringend empfohlen, den Kodierungstyp anzugeben.

f = open("test.txt", mode='r', encoding='utf-8')

 


 

 

Closing Files in Python

Wenn wir mit der Ausführung von Operationen an der Datei fertig sind, müssen wir die Datei ordnungsgemäß schließen.

 

Durch das Schließen einer Datei werden die Ressourcen freigegeben, die mit der Datei verknüpft waren. Es geschieht mit dem close() in Python verfügbare Methode.

Python hat einen Garbage Collector, um nicht referenzierte Objekte zu bereinigen, aber wir dürfen uns nicht darauf verlassen, dass die Datei geschlossen wird.

f = open("test.txt", encoding = 'utf-8')
# perform file operations
f.close()

 

Diese Methode ist nicht ganz ungefährlich. Wenn beim Ausführen einer Operation mit der Datei eine Ausnahme auftritt, wird der Code beendet, ohne die Datei zu schließen.

Ein sichererer Weg ist die Verwendung eines try…finally  Blocks.

try:
   f = open("test.txt", encoding = 'utf-8')
   # perform file operations
finally:
   f.close()

 

Auf diese Weise garantieren wir, dass die Datei auch dann ordnungsgemäß geschlossen wird, wenn eine Ausnahme ausgelöst wird, die den Programmfluss stoppt.

 

Der beste Weg, eine Datei zu schließen, ist mit der with anweisung. Dadurch wird sichergestellt, dass die Datei geschlossen wird, wenn der Block innerhalb der with anweisung wird verlassen.

Wir müssen die nicht explizit aufrufen close() methode. Es wird intern gemacht.

with open("test.txt", encoding = 'utf-8') as f:
   # perform file operations

 


 

Writing to Files in Python

 

Um in Python in eine Datei zu schreiben, müssen wir sie in write öffnen w, anhängen a oder exklusive Kreation x mode.

 

Wir müssen vorsichtig sein mit den w modus, da es die Datei überschreibt, wenn sie bereits existiert. Dadurch werden alle bisherigen Daten gelöscht.

 

Das Schreiben eines Strings oder einer Folge von Bytes (für Binärdateien) erfolgt mit dem write() Methode. Diese Methode gibt die Anzahl der in die Datei geschriebenen Zeichen zurück.

with open("test.txt",'w',encoding = 'utf-8') as f:
   f.write("my first file\n")
   f.write("This file\n\n")
   f.write("contains three lines\n")

 

Dieses Programm erstellt eine neue Datei namens test.txt im aktuellen Verzeichnis, wenn es nicht existiert. Wenn es existiert, wird es überschrieben.

Wir müssen die Zeilenumbruchzeichen selbst einfügen, um die verschiedenen Zeilen zu unterscheiden.

 


 

 

Reading Files in Python

 

Um eine Datei in Python zu lesen, müssen wir die Datei in Reading öffnen r Modus.

 

Hierfür stehen verschiedene Methoden zur Verfügung. Wir können die nutzen read(size) methode zum Einlesen der size Anzahl der Daten. Wenn die size parameter nicht angegeben ist, wird bis zum Ende der Datei gelesen und zurückgegeben.

 

Wir können das lesen text.txt Datei, die wir im obigen Abschnitt wie folgt geschrieben haben:

>>> f = open("test.txt",'r',encoding = 'utf-8')
>>> f.read(4)    # read the first 4 data
'This'

>>> f.read(4)    # read the next 4 data
' is '

>>> f.read()     # read in the rest till end of file
'my first file\nThis file\ncontains three lines\n'

>>> f.read()  # further reading returns empty sting
''

 

Wir können sehen, dass die read() methode gibt einen Zeilenumbruch zurück als '\n'. Sobald das Ende der Datei erreicht ist, erhalten wir beim weiteren Lesen einen leeren String.

 

Wir können unseren aktuellen Dateicursor (Position) mit dem seek() Methode. Ebenso die tell() Methode gibt unsere aktuelle Position (in Bytes) zurück.

>>> f.tell()    # get the current file position
56

>>> f.seek(0)   # bring file cursor to initial position
0

>>> print(f.read())  # read the entire file
This is my first file
This file
contains three lines

 

Wir können eine Datei zeilenweise mit einer for Schleife (link) lesen. Das ist effizient und schnell.

>>> for line in f:
...     print(line, end = '')
...
This is my first file
This file
contains three lines

 

In diesem Programm enthalten die Zeilen in der Datei selbst ein Zeilenumbruchzeichen \n. Also verwenden wir den Endparameter des print() Funktion, um zwei Zeilenumbrüche beim Drucken zu vermeiden.

 

Alternativ können wir die readline() Methode, um einzelne Zeilen einer Datei zu lesen. Diese Methode liest eine Datei bis zum Zeilenumbruch, einschließlich des Zeilenumbruchzeichens.

 

>>> f.readline()
'This is my first file\n'

>>> f.readline()
'This file\n'

>>> f.readline()
'contains three lines\n'

>>> f.readline()
''

 

Schließlich die readlines() methode gibt eine Liste der verbleibenden Zeilen der gesamten Datei zurück. Alle diese Lesemethoden geben leere Werte zurück, wenn das Dateiende (EOF) erreicht ist.

>>> f.readlines()
['This is my first file\n', 'This file\n', 'contains three lines\n']

 


 

 

Python File Methods

Für das Dateiobjekt stehen verschiedene Methoden zur Verfügung. Einige von ihnen wurden in den obigen Beispielen verwendet.

Hier ist die vollständige Liste der Methoden im Textmodus mit einer kurzen Beschreibung:

 

Method Description
close() Schließt eine geöffnete Datei. Es hat keine Auswirkung, wenn die Datei bereits geschlossen ist.
detach() Trennt den zugrunde liegenden binären Puffer vom TextIOBase und gibt es zurück.
fileno() Gibt eine ganze Zahl (Dateideskriptor) der Datei zurück.
flush() Leert den Schreibpuffer des Dateistroms.
isatty() Kehrt zurück True wenn der Dateistream interaktiv ist.
read(n) Liest höchstens n Zeichen aus der Datei. Liest bis zum Ende der Datei, wenn sie negativ ist oder None.
readable() Kehrt zurück True wenn der Dateistream gelesen werden kann..
readline(n=-1) Liest eine Zeile aus der Datei und gibt sie zurück. Liest sich höchstens ein n Byte, falls angegeben.
readlines(n=-1) Liest eine Liste von Zeilen aus der Datei und gibt sie zurück. Liest sich höchstens ein n Bytes/Zeichen, falls angegeben.
seek(offset,from=SEEK_SET) Ändert die Dateiposition zuoffset Bytes, in Bezug auf from (start, current, end).
seekable() Kehrt zurück Truewenn der Dateistream wahlfreien Zugriff unterstützt.
tell() Gibt den aktuellen Speicherort der Datei zurück.
truncate(size=None) Ändert die Größe des Dateistroms auf size bytes. Wenn size nicht angegeben ist, wird die Größe an die aktuelle Position angepasst.
writable() Kehrt zurück True ob in den Dateistream geschrieben werden kann.
write(s) Schreibt die Zeichenfolges in die Datei und gibt die Anzahl der geschriebenen Zeichen zurück.
writelines(lines) Schreibt eine Liste von lines zur Datei.