Heim > Artikel > Backend-Entwicklung > Detaillierte Erläuterung der Lese- und Schreibvorgänge für Python-Dateien
1.open
Nachdem Sie open zum Öffnen einer Datei verwendet haben, müssen Sie daran denken, die Methode close() des Dateiobjekts aufzurufen. Beispielsweise können Sie mit der try/finally-Anweisung sicherstellen, dass die Datei endgültig geschlossen werden kann.
file_object = open('thefile.txt')
versuchen Sie:
all_the_text = file_object.read( )
endlich:
File_object.close( )
Hinweis: Die open-Anweisung kann nicht im try-Block platziert werden, da das Dateiobjekt file_object die Methode close() nicht ausführen kann, wenn beim Öffnen der Datei eine Ausnahme auftritt.
2. Datei lesen
Textdatei lesen
input = open('data', 'r')
#Der zweite Parameter ist standardmäßig r
input = open('data')
Binärdatei lesen
input = open('data', 'rb')
Alle Inhalte lesen
file_object = open('thefile.txt')
versuchen Sie:
all_the_text = file_object.read( )
endlich:
file_object.close( )
Feste Bytes lesen
file_object = open('abinfile', 'rb' )
try:
while True:
chunk = file_object.read(100)
if not chunk:
break
do_something_with(chunk)
endlich:
file_object.close( )
Jede Zeile lesen
list_of_all_the_lines = file_object.readlines( )
Wenn es sich bei der Datei um eine Textdatei handelt, können Sie das Dateiobjekt auch direkt durchlaufen, um jede Zeile zu erhalten:
für Zeile in file_object:
Prozesszeile
3. Datei schreiben
Textdatei schreiben
output = open('data', 'w')
Binärdatei schreiben
Ausgabe = open('data', 'wb')
Schreibdatei anhängen
Ausgabe = open('data', 'w')
Daten schreiben
file_object = open('thefile.txt', 'w')
file_object .write(all_the_text)
file_object.close( )
Mehrere Zeilen schreiben
file_object.writelines(list_of_text_strings)
Beachten Sie, dass der Aufruf von writelines zum Schreiben mehrerer Zeilen eine höhere Leistung hat als die Verwendung von write zum gleichzeitigen Schreiben aller Zeilen.
Bei der Verarbeitung von Protokolldateien stoßen wir häufig auf eine solche Situation: Die Protokolldatei ist riesig und es ist unmöglich, die gesamte Datei auf einmal zur Verarbeitung einzulesen Bei einem Computer mit einem physischen Speicher von 2 GB möchten wir möglicherweise nur 200 MB des Inhalts gleichzeitig verarbeiten.
In Python stellt das integrierte File-Objekt direkt eine readlines(sizehint)-Funktion bereit, um so etwas zu erreichen. Nehmen Sie den folgenden Code als Beispiel:
file = open('test.log', 'r')sizehint = 209715200 # 200Mposition = 0lines = file.readlines(sizehint)while not file.tell() - Position
Jedes Mal, wenn die Funktion readlines(sizehint) aufgerufen wird, werden ungefähr 200 MB Daten zurückgegeben, und alle zurückgegebenen Zeilen müssen sein vollständige Zeilen Daten, in den meisten Fällen ist die Anzahl der Bytes der zurückgegebenen Daten etwas größer als der durch sizehint angegebene Wert (außer wenn die Funktion readlines(sizehint) zum letzten Mal aufgerufen wird). Normalerweise passt Python den vom Benutzer angegebenen Sizehint-Wert automatisch an ein ganzzahliges Vielfaches der internen Cache-Größe an.
Datei ist ein spezieller Typ in Python, der zum Betrieb externer Dateien in Python-Programmen verwendet wird. Alles in Python ist ein Objekt, und Datei ist keine Ausnahme. Datei hat Dateimethoden und -attribute. Schauen wir uns zunächst an, wie man ein Dateiobjekt erstellt:
file(name[, mode[, buffering]]) Die Funktion
file() wird verwendet, um ein Dateiobjekt zu erstellen, das hat ein Alias open(), vielleicht anschaulicher ausgedrückt, handelt es sich um integrierte Funktionen. Werfen wir einen Blick auf seine Parameter. Seine Parameter werden alle in Form von Zeichenfolgen übergeben. Name ist der Name der Datei.
Modus ist der offene Modus, die optionalen Werte sind r w a U, die Lese- (Standard) bzw. Schreibmodi darstellen, die verschiedene Zeilenumbrüche unterstützen. Wenn Sie eine Datei im W- oder A-Modus öffnen und die Datei nicht existiert, wird sie automatisch erstellt. Wenn Sie den W-Modus zum Öffnen einer vorhandenen Datei verwenden, wird außerdem der Inhalt der Originaldatei gelöscht, da sich die anfängliche Dateioperationsmarkierung am Anfang der Datei befindet. Wenn Sie zu diesem Zeitpunkt einen Schreibvorgang ausführen, wird der Originalinhalt gelöscht wird zweifellos gelöscht. Aus historischen Gründen hat das Newline-Zeichen in verschiedenen Systemen unterschiedliche Modi. Unter Unix ist es beispielsweise ein n und unter Windows ist es „rn“. Das Öffnen einer Datei im U-Modus unterstützt alle Newline-Modi, was bedeutet: „ r' 'n' 'rn' kann alle Zeilenumbrüche darstellen, und es wird ein Tupel zum Speichern der in dieser Datei verwendeten Zeilenumbruchzeichen verwendet. Obwohl es viele Modi für Zeilenumbrüche gibt, wird beim Lesen in Python stattdessen n verwendet. Nach dem Moduszeichen können Sie auch die beiden Bezeichner b und t hinzufügen, die jeweils angeben, dass die Datei gleichzeitig gelesen und geschrieben werden kann und die Datei im Binärmodus oder Textmodus (Standard) geöffnet werden kann.
Wenn die Pufferung 0 ist, bedeutet dies keine Pufferung. Wenn sie 1 ist, bedeutet dies „Zeilenpufferung“. Wenn sie eine Zahl größer als 1 ist, bedeutet dies die Größe des Puffers, die in Bytes angegeben werden sollte.
Das Dateiobjekt verfügt über eigene Eigenschaften und Methoden. Schauen wir uns zunächst die Attribute der Datei an.
geschlossen #Markieren Sie, ob die Datei geschlossen wurde, neu geschrieben durch close()
Kodierung #Dateikodierung
Modus #Öffnungsmodus
Name #Datei name
newlines #Der in der Datei verwendete Newline-Modus ist ein Tupel
Softspace #boolescher Typ, normalerweise 0. Er soll zum Lesen und Schreiben von print
verwendet werden Datei:
F.read([size]) #size ist die Länge des Lesevorgangs in Bytes
F.readline([size])
#Eine Zeile lesen , wenn Wenn die Größe definiert ist, ist es möglich, nur einen Teil einer Zeile zurückzugeben
F.readlines([size])
# Jede Zeile der Datei als Mitglied einer Liste behandeln und diese Liste zurückgeben. Tatsächlich wird es intern durch den Aufruf von readline() in einer Schleife implementiert. Wenn der Größenparameter angegeben wird, stellt die Größe die Gesamtlänge des gelesenen Inhalts dar, was bedeutet, dass nur ein Teil der Datei gelesen werden darf.
F.write(str)
#Str in die Datei schreiben, write() fügt nach str kein Newline-Zeichen hinzu
F.writelines( seq)
#Schreiben Sie den gesamten Inhalt von seq in die Datei. Diese Funktion schreibt auch einfach originalgetreu, ohne nach jeder Zeile etwas hinzuzufügen. Andere Methoden der
Datei:
F.close()
#Schließen Sie die Datei. Python schließt eine Datei automatisch, wenn sie nicht mehr verwendet wird. Diese Funktion ist jedoch nicht garantiert. Es ist am besten, die Gewohnheit zu entwickeln, sie selbst zu schließen. Wenn eine Datei nach dem Schließen bearbeitet wird, wird ein ValueError generiert
F.flush()
#Schreiben Sie den Inhalt des Puffers auf die Festplatte
F.fileno( )
#Gibt eine lange Ganzzahl „Dateibezeichnung“ zurück
F.isatty()
#Ob es sich bei der Datei um eine Terminalgerätedatei handelt (in Unix-Systemen). )
F.tell()
#Gibt die aktuelle Position der Dateioperationsmarkierung zurück, mit dem Anfang der Datei als Ursprung
F.next()
#Gibt die nächste Zeile zurück und verschiebt das Dateioperationsflag in die nächste Zeile. Wenn eine Datei in einer Anweisung wie for ... in file verwendet wird, wird die Funktion next() aufgerufen, um die Traversierung zu implementieren.
F.seek(offset[,whence])
#Bewegen Sie die Dateioperationsmarkierung an die Offset-Position. Dieser Versatz wird im Allgemeinen relativ zum Dateianfang berechnet und ist im Allgemeinen eine positive Zahl. Dies ist jedoch nicht unbedingt der Fall, wenn der wherece-Parameter angegeben wird. wherece kann 0 sein, um die Berechnung von vorne zu beginnen, und 1, um die aktuelle Position als Ursprung zu verwenden. 2 gibt an, dass das Ende der Datei als Ausgangspunkt für die Berechnung verwendet wird. Es ist zu beachten, dass beim Öffnen der Datei im Modus a oder a die Dateioperationsmarkierung bei jedem Schreibvorgang automatisch zum Ende der Datei zurückkehrt.
F.truncate([size])
#Schneiden Sie die Datei auf die angegebene Größe. Standardmäßig wird auf die Position der aktuellen Dateioperationsmarkierung geschnitten. Wenn die Größe größer als die Dateigröße ist, wird die Datei je nach System möglicherweise nicht geändert, die Datei wird möglicherweise mit 0 auf die entsprechende Größe aufgefüllt oder es werden zufällige Inhalte hinzugefügt.