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:
- Öffne einen Ordner
- Lesen oder Schreiben (Operation ausführen)
- 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 w
oder 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 a
impliziert 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 cp1252
aber utf-8
unter 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 with
Anweisung. Dadurch wird sichergestellt, dass die Datei geschlossen wird, wenn der Block in der with
Anweisung 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- a
oder exklusiven Erstellungsmodus öffnen x
.
Wir müssen mit dem w
Modus 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.txt
im 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 r
Lesemodus ö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.txt
Datei, 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 TextIOBase und gibt ihn zurück. |
fileno () | Gibt eine Ganzzahl (Dateideskriptor) der Datei zurück. |
spülen() | Leert den Schreibpuffer des Dateistreams. |
isatty () | Gibt zurück, True wenn 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. |