Python-Datei-E / A: Lesen und Schreiben von Dateien in Python

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

Video: Lesen und Schreiben von Dateien in Python

Dateien

Dateien sind benannte Speicherorte auf der Festplatte, auf denen verwandte Informationen gespeichert werden. Sie werden verwendet, um Daten dauerhaft in einem nichtflüchtigen Speicher (z. B. einer Festplatte) zu speichern.

Da der Arbeitsspeicher (RAM) flüchtig ist (der 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 sie schreiben möchten, müssen wir sie zuerst öffnen. Wenn wir fertig sind, muss es geschlossen werden, damit die mit der Datei verknüpften Ressourcen freigegeben werden.

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

  1. Öffne einen Ordner
  2. Lesen oder Schreiben (Operation ausführen)
  3. Schließen Sie die Datei

Dateien in Python öffnen

Python verfügt über eine integrierte open()Funktion zum Öffnen einer Datei. Diese Funktion gibt ein Dateiobjekt zurück, das auch als Handle bezeichnet wird, da es zum Lesen oder Ändern der Datei verwendet wird.

 >>> f = open("test.txt") # open file in current directory >>> f = open("C:/Python38/README.txt") # specifying full path

Wir können den Modus beim Öffnen einer Datei festlegen. Im Modus geben wir an, ob wir die Datei lesen r, schreiben woder anhängen möchten a. Wir können auch angeben, ob die Datei im Textmodus oder im Binärmodus geöffnet werden soll.

Standardmäßig wird im Textmodus gelesen. In diesem Modus erhalten wir beim Lesen aus der Datei Zeichenfolgen.

Andererseits gibt der Binärmodus Bytes zurück. Dies ist der Modus, der verwendet wird, wenn Nicht-Textdateien wie Bilder oder ausführbare Dateien verarbeitet werden.

Modus Beschreibung
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 abzuschneiden. Erstellt eine neue Datei, wenn sie nicht vorhanden ist.
t Wird im Textmodus geöffnet. (Standard)
b Wird im Binärmodus geöffnet.
+ Öffnet eine Datei zum Aktualisieren (Lesen und Schreiben)
 f = open("test.txt") # equivalent to 'r' or 'rt' f = open("test.txt",'w') # write in text mode f = open("img.bmp.webp",'r+b') # read and write in binary mode

Im Gegensatz zu anderen Sprachen aimpliziert das Zeichen die Nummer 97 erst, wenn es mit ASCII(oder anderen äquivalenten Codierungen) codiert wurde.

Darüber hinaus ist die Standardcodierung plattformabhängig. In Windows ist es cp1252aber utf-8unter Linux.

Wir dürfen uns also nicht auf die Standardcodierung verlassen, sonst verhält sich unser Code auf verschiedenen Plattformen unterschiedlich.

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

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

Dateien in Python schließen

Wenn wir mit dem Ausführen von Vorgängen für die Datei fertig sind, müssen wir die Datei ordnungsgemäß schließen.

Durch das Schließen einer Datei werden die mit der Datei verknüpften Ressourcen freigegeben. Dies erfolgt mit der close()in Python verfügbaren 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 sicher. Wenn beim Ausführen einer Operation mit der Datei eine Ausnahme auftritt, wird der Code beendet, ohne die Datei zu schließen.

Ein sicherer Weg ist es, einen Versuch zu verwenden … endlich zu blockieren.

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

Auf diese Weise stellen wir sicher, dass die Datei ordnungsgemäß geschlossen wird, auch wenn eine Ausnahme ausgelöst wird, die dazu führt, dass der Programmfluss gestoppt wird.

Der beste Weg, eine Datei zu schließen, ist die Verwendung der withAnweisung. Dadurch wird sichergestellt, dass die Datei geschlossen wird, wenn der Block in der withAnweisung beendet wird.

Wir müssen die close()Methode nicht explizit aufrufen . Es wird intern durchgeführt.

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

Schreiben in Dateien in Python

Um in eine Datei in Python zu schreiben, müssen wir sie im Schreib- w, Anhänge- aoder exklusiven Erstellungsmodus öffnen x.

Wir müssen mit dem wModus vorsichtig sein , da er in die Datei überschreibt, wenn er bereits vorhanden ist. Aus diesem Grund werden alle vorherigen Daten gelöscht.

Das Schreiben einer Zeichenfolge oder einer Folge von Bytes (für Binärdateien) erfolgt mit der 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") f.write("This file") f.write("contains three lines")

Dieses Programm erstellt eine neue Datei mit dem Namen test.txtim aktuellen Verzeichnis, falls diese nicht vorhanden ist. Wenn es existiert, wird es überschrieben.

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

Dateien in Python lesen

Um eine Datei in Python zu lesen, müssen wir die Datei im rLesemodus öffnen .

Zu diesem Zweck stehen verschiedene Methoden zur Verfügung. Wir können die read(size)Methode verwenden, um die Größe der Daten einzulesen. Wenn der Parameter size nicht angegeben ist, wird er gelesen und bis zum Ende der Datei zurückgegeben.

Wir können die text.txtDatei, die wir im obigen Abschnitt geschrieben haben, folgendermaßen lesen :

 >>> 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 fileThis filecontains three lines' >>> f.read() # further reading returns empty sting ''

Wir können sehen, dass die read()Methode einen Zeilenumbruch als zurückgibt ''. Sobald das Ende der Datei erreicht ist, erhalten wir beim weiteren Lesen eine leere Zeichenfolge.

Mit der seek()Methode können wir unseren aktuellen Dateicursor (Position) ändern . In ähnlicher Weise gibt die tell()Methode unsere aktuelle Position zurück (in Anzahl der Bytes).

 >>> 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 Zeile für Zeile mit einer for-Schleife lesen. Dies ist sowohl effizient als auch 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 . Daher verwenden wir den print()Endparameter der Funktion, um beim Drucken zwei Zeilenumbrüche zu vermeiden.

Alternativ können wir die readline()Methode verwenden, 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' >>> f.readline() 'This file' >>> f.readline() 'contains three lines' >>> f.readline() ''

Zuletzt gibt die readlines()Methode 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', 'This file', 'contains three lines')

Python-Dateimethoden

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:

Methode Beschreibung
schließen() Schließt eine geöffnete Datei. Es hat keine Auswirkung, wenn die Datei bereits geschlossen ist.
ablösen() Trennt den zugrunde liegenden Binärpuffer vom TextIOBaseund gibt ihn zurück.
fileno () Gibt eine Ganzzahl (Dateideskriptor) der Datei zurück.
spülen() Leert den Schreibpuffer des Dateistreams.
isatty () Gibt zurück, Truewenn der Dateistream interaktiv ist.
lies (n) Reads at most n characters from the file. Reads till end of file if it is negative or None.
readable() Returns True if the file stream can be read from.
readline(n=-1) Reads and returns one line from the file. Reads in at most n bytes if specified.
readlines(n=-1) Reads and returns a list of lines from the file. Reads in at most n bytes/characters if specified.
seek(offset,from=SEEK_SET) Changes the file position to offset bytes, in reference to from (start, current, end).
seekable() Returns True if the file stream supports random access.
tell() Returns the current file location.
truncate(size=None) Resizes the file stream to size bytes. If size is not specified, resizes to current location.
writable() Returns True if the file stream can be written to.
write(s) Schreibt die Zeichenfolge s in die Datei und gibt die Anzahl der geschriebenen Zeichen zurück.
Schreiblinien (Zeilen) Schreibt eine Liste von Zeilen in die Datei.

Interessante Beiträge...