Heim > Artikel > Backend-Entwicklung > Detaillierte Einführung in die Dateiverarbeitung in Python
Wenn Sie eine Datei auf der Festplatte in Python bearbeiten möchten, kann dieser grob in drei Schritte unterteilt werden:
Verwenden Sie die Open-Funktion, um ein Dateihandle zu öffnen und zuzuweisen zu einer Variablen.
Bedienen Sie die angegebene Datei über das entsprechende Dateihandle.
Schließen Sie die Datei, nachdem der Vorgang abgeschlossen ist. Nachdem die Datei geschlossen wurde, wird der Dateiinhalt auf die Festplatte geschrieben.
Die Methode zur Verwendung der Öffnungsfunktion ist wie folgt.
open('file path',mode='mode to open file',encoding='filekodierungsmethode')
Dateipfad: Dieser Dateipfad kann ein absoluter Pfad oder ein relativer Pfad sein In Python müssen Sie nur den Dateinamen für den relativen Pfad schreiben. Wenn sich das Python-Programm und die zu öffnende Datei im selben Verzeichnis befinden, verwenden Sie einfach den relativen Pfad.
Achtung! Wenn Sie die Open-Funktion verwenden möchten, ist der Dateipfad ein notwendiger Parameter und kann nicht weggelassen werden!
Modus zum Öffnen von Dateien: Es gibt einen optionalen formalen Parameter in der Öffnungsfunktion, nämlich den Modus, der zum Definieren des Öffnungsmodus der Datei verwendet wird. Wenn der Dateiöffnungsmodus nicht angegeben ist, wird r (gelesen -only) wird standardmäßig zum Öffnen der Datei verwendet.
Die in Python bereitgestellten gängigen Methoden zum Öffnen von Dateien sind wie folgt:
'r' öffnet die Datei im schreibgeschützten Modus. Verwenden Sie r (schreibgeschützter Modus), um die Datei zu öffnen Die Datei kann nur gelesen und nicht durch Schreiben geändert werden. (Wenn die Datei nicht vorhanden ist, wird eine Ausnahme ausgelöst)
'w' öffnet die Datei im schreibgeschützten Modus. Verwenden Sie w (schreibgeschützter Modus), um die Datei zu öffnen Geschrieben, nicht gelesen, aber eines muss besonders beachtet werden! ! ! ! ! Sobald eine Datei mit Originalinhalt mit w geöffnet wird, wird der Inhalt der Datei gelöscht! ! (Den Grund werde ich später in diesem Artikel hinzufügen.) (Wenn Sie nicht möchten, dass der ursprüngliche Inhalt der Datei gelöscht wird!! Dann verwenden Sie niemals den W-Modus!!!!!!) (Wenn die Datei nicht existiert, wird eine Datei erstellt. Wenn die Datei vorhanden ist, wird der Dateiinhalt zuerst gelöscht)
Der Anhängemodus „a“ ist auch ein Nur-Schreibmodus, der zum Anhängen von Inhalten am Ende verwendet wird der Angebotspreis und der geschriebene Inhalt werden an das Ende der Datei angehängt
‚b‘ Binärmodus, verwenden Sie den Binärmodus, um die Datei zu öffnen, aufgepasst! Dieses „b“ (Binärmodus) ist in Kombination mit den drei Modi (r, w, a) zu verwenden. (Dieser Modus wird für plattform- und betriebssystemübergreifende Systeme empfohlen)
'r+' Lesbar und beschreibbar (In diesem Modus ist es zwar lesbar und beschreibbar, Sie müssen jedoch beim Schreiben auf den Suchzeiger achten noch in der Datei Wenn Sie direkt mit dem Schreiben beginnen, ohne die Position des Suchzeigers anzupassen, beginnen Sie direkt mit dem Überschreiben des zuvor geschriebenen Inhalts (beginnend mit dem Kopf der Datei). Daher müssen Sie bei Verwendung des r+-Modus darauf achten Position des Suchzeigers. Andernfalls wird der ursprüngliche Inhalt überschrieben.
'w+' kann im Allgemeinen nicht verwendet werden und die Datei wird gelöscht direkt)
' a+' am Ende angehängt, beschreibbar und lesbar
1. Gängige Methoden zum Bedienen von Dateiobjekten
Dateien lesen:
lesbar( ) wird verwendet, um zu bestimmen, ob die Datei lesbar ist. Gibt „True“ zurück, wenn sie lesbar ist, andernfalls „False“.
readline() liest die Datei Zeile für Zeile und gibt den String-Typ zurück.
read() liest den gesamten Inhalt der Datei auf einmal und gibt einen gesamten String zurück.
readlines() liest den gesamten Inhalt der Datei und fügt jede Zeile der Datei zu einer Liste hinzu. Jede Zeile der Datei wird als Element in der Liste verwendet.
Datei schreiben:
writable(): Bestimmen Sie, ob die Datei beschreibbar ist, geben Sie True zurück, andernfalls geben Sie False zurück.
write(): Inhalte in die Datei schreiben. Diese Methode kann nur verwendet werden, wenn sich die Datei im beschreibbaren Modus befindet. Der spezifische Speicherort der zu schreibenden Datei hängt vom Öffnungsmodus der Datei ab (r+). a+ oder w+) Es hängt auch davon ab, wohin der aktuelle Suchzeiger in der Datei zeigt. (Außerdem gibt es bei Verwendung der Schreibmethode zum Schreiben von Inhalten in das Innere einer Datei kein Zeilenumbruchzeichen. Sie müssen manuell ein Zeilenumbruchzeichen hinzufügen, da sonst der gesamte Inhalt zusammenhängt.)
Beispiel: f1.write(' hello!n') #n ist das Newline-Zeichen.
writelines(): Ähnlich wie wirte schreibt es Inhalte in das Innere der Datei. Anders als write verwendet es die Form einer Liste, um Inhalte in das Innere der Datei zu schreiben. Python führt eine Listenschleife durch und jedes Element in der Liste wird in die Datei geschrieben.
Achtung! Wenn Sie writelines verwenden, um Inhalte in die Datei zu schreiben, gibt es kein Newline-Zeichen. Wenn Sie am Ende jedes Elements ein Newline-Zeichen hinzufügen, ist jedes Element in der Liste eine Zeile in der Datei.
Achtung! ! Der in die Datei geschriebene Inhalt kann nur Zeichenfolgen sein, keine anderen Typen! ! Andernfalls wird eine Ausnahme ausgelöst. Auch wenn eine Zahl geschrieben werden soll, muss die Zahl in einen String-Typ umgewandelt werden! ! !
Andere Operationen:
close() zum Schließen der Datei. Wenn die Datei gelesen oder geschrieben wird, verwenden Sie unbedingt close, um die Datei zu schließen! (Außer bei Verwendung der with-Syntax, da die Verwendung des with-Schlüsselworts zum Öffnen einer Datei die Datei automatisch schließt, nachdem der Vorgang für die Datei abgeschlossen ist.)
Wenn Sie die Datei nach dem Lesen nicht schließen, belegt das Programm weiterhin Systemressourcen.
Wenn Sie die Datei nach dem Schreiben nicht schließen, wird der Inhalt im Speicher nicht rechtzeitig mit der Festplatte synchronisiert. Wenn Sie den Inhalt vollständig auf die Festplatte schreiben möchten, verwenden Sie andernfalls „Schließen“, um die Datei zu schließen Andernfalls verwenden Sie die Flush-Methode. Erzwingen Sie, dass die Daten im Speicher auf die Festplatte geleert werden.
flush() löscht die Daten im Speicher, die nicht auf die Festplatte geschrieben wurden, zwangsweise auf die Festplatte.
Encoding: Zeigt die Codierung der geöffneten Datei an (diese Methode ist in Python2 nicht verfügbar, kann aber in Python3 verwendet werden.)
tell(): Sie können die Position der aktuellen Datei ermitteln Zeiger suchen.
Seek (Zeigerposition, Modus) verschiebt den Suchzeiger an die Position in der Datei in Bytes.
Es gibt drei Modi zum Bedienen des Suchzeigers in Pyrhon. Im Folgenden finden Sie eine detaillierte Einführung in diese drei Modi:
file.seek(n,0)#n repräsentiert die Position des Zeigers von , die Zahl 0 dahinter stellt die Seriennummer des Modus dar.
file.seek(n,0): (Modus 0) Modus 0 stellt die absolute Position dar. Wenn n die Zahl ist, wird der Zeiger auf die Byte-Zählung vom Anfang der Datei verschoben. (Wenn Sie bei der Verwendung von „seek“ keinen Modus angeben, ist der Standardmodus 0.)
Zum Beispiel verschiebt file.seek(3,0) den Zeiger an den Anfang der Datei (0. Byte). Startnummer, Drei-Byte-Position.
# Vor der Verwendung von Zeigern
f1 = open('seasons.lrc',mode='r')
print f1.readline()
>>>Hamazaki あゆみ- Seasons
#Das Folgende ist, den 0-Modus zu verwenden, den Zeiger auf das 3. Byte der Datei zu bewegen, den Zeiger auf das 3. Byte zu bewegen und dann die Datei zu lesen Die Datei wird beginnend hinter dem Zeiger gelesen.
f1 = open('seasons.txt',mode='r')
print f1.tell() #Zeigt die aktuelle Position des Suchzeigers an
> ; >>0 # (Die Position ist 0, was bedeutet, dass sich der Zeiger am Anfang der Datei befindet)
f1.seek(3,0) # (Bewegen Sie den Zeiger auf das dritte Byte, verwenden Sie 0-Modus, absolute Position)
print f1.tell() #Überprüfen Sie die Zeigerposition erneut. Sie können überprüfen, ob die Zeigerposition tatsächlich auf das dritte Byte verschoben wurde.
>>>3
print f1.readline() #Liest eine Zeile ab der Position des aktuellen Zeigers.
>> Warum wird nach Bytes ein Zeichen übersprungen?
Sie müssen verstehen, was Zeichen und Bytes sind. Sie müssen sich über dieses Konzept im Klaren sein! ! Bei der UTF-8-Zeichenkodierung belegt ein chinesisches Zeichen drei Bytes. Der ursprüngliche Inhalt der ersten Zeile lautet „Hamazaki Yumi-Season“. Da ein chinesisches Zeichen drei Bytes belegt, wird der Zeiger um drei Bytes nach hinten verschoben Der Zeiger wird hinter „浜“ verschoben. Beim Lesen der Datei beginnt der Lesevorgang hinter diesem Zeichen. Es wird also „恂あゆみ“ angezeigt. (Ein japanisches Zeichen belegt auch drei Bytes in der UTF-8-Zeichenkodierung.)
Ich werde später ein Beispiel geben. Dieses Beispiel kann Ihnen helfen, die Bedeutung von „absolute Position“ zu verstehen.
f1 = open('seasons.lrc',mode='r')
print f1.tell() #Nach dem Öffnen der Datei ist die Standardposition des Zeigers 0.
>>>0
f1.seek(3,0) #Bewegen Sie den Finger an die Position von 3 Bytes in der Datei.
print f1.tell()
>>>3
f1.seek(3,0)
print f1.tell( )
>>>3
file.seek(n,1): (Modus 1) Modus 1, relative Position, n gibt an, wie weit sich der Zeiger aktuell zurückbewegt Positionsbytes.
Wenn Sie der Meinung sind, dass das, was ich sage, nicht leicht zu verstehen ist, werden Sie es vielleicht verstehen, nachdem Sie die folgenden Beispiele gelesen haben.
f1 = open('seasons.lrc',mode='r')
print f1.tell() #Nach dem Öffnen der Datei ist die Standardposition des Zeigers 0.
>>>0
f1.seek(3,1) #Bewegen Sie den Zeiger 3 Bytes nach hinten.
print f1.tell()
>>>3 #Der Zeiger bewegt sich zur 3. Byte-Position.
f1.seek(3,1) #Hier ist der entscheidende Punkt: Bewegen Sie den Zeiger 3 Bytes nach hinten (hier können Sie den Unterschied zwischen Modus 1 und Modus 0 vergleichen.)
print f1 .tell()
>>>6 #Die Position des Zeigers befindet sich im 6. Byte, was auch zeigt, dass jedes Mal, wenn sich der 1-Modus bewegt, nicht von vorne begonnen wird der Datei und bewegt sich basierend auf der letzten Position des Zeigers rückwärts. (Das bedeutet „relative Position“.)
Wenn Sie es immer noch nicht verstehen, lesen Sie die Ergänzung unten.
Abschließend möchte ich hinzufügen:
f1.seek(3,0) bedeutet, den Zeiger auf das dritte Byte der Datei zu bewegen. (Absolute Position)
f1.seek(3,1) bedeutet, den Zeiger von der aktuellen Position 3 Bytes nach hinten zu bewegen. (Relative Position)
file.seek(-n,2): Verwenden Sie die absolute Position, beginnend am Ende der Datei und bis zum Anfang der Datei. (Bei Verwendung des 2-Modus müssen Sie beachten, dass die Position der Zeigerbewegung nur eine negative Zahl sein kann, da sie am Ende beginnt und sich vorwärts bewegt!)
Das Folgende ist ein Beispiel:
#Öffnen Sie eine Datei und verwenden Sie die Lesemethode, um vom Anfang bis zum Ende der Datei zu lesen. Wenn die Datei gelesen wird, bewegt sich der Zeiger natürlich zurück zum Ende der Datei.
f1 = open('seasons.txt',mode='r')
print f1.tell()
>>>0
f1.read()
print f1.tell()
>>>756
Jetzt wissen wir durch die obige Methode, dass das Ende der Datei erreicht ist die Datei Die ersten paar Bytes von .
Testen wir, ob die 2-Modus-Funktion der Suchmethode wie zuvor erwähnt ist, beginnend am Ende der Datei und bis zum Anfang der Datei.
f1 = open('seasons.txt',mode='r')
print f1.tell()
>>>0
f1.seek(-1,2) #Verwenden Sie den Suchmodus 2, um den Zeiger 1 Byte vom Ende der Datei vorwärts zu bewegen
print f1.tell()
>>>755
#Das Ende der Datei ist 756, ein Byte vorwärts ist 755 und wir erhalten den gewünschten Effekt.
Tatsächlich sind die beiden Modi der Suchmethode sehr nützlich. Im Folgenden finden Sie eine detaillierte Beschreibung der beiden Modi der Suchmethode.
Um die 1. bis N-te Zeile aus der letzten Zeile der Datei zu erhalten, können Sie den 2-Modus der Suchmethode verwenden.
Zu diesem Zeitpunkt könnte jemand fragen, ob es nicht ein sehr einfacher Vorgang ist, die letzte Zeile der Datei herauszunehmen. Verwenden Sie einfach die Readlines-Methode, um die Datei auszulesen, und nehmen Sie dann das letzte Element. und dann können Sie die letzte Zeile erhalten. Wäre diese Methode nicht einfacher?
So.
f1 = open('seasons.txt',mode='r')
print f1.readlines()[-1]
>>> Die letzte Zeile der Datei wird zwar herausgenommen, aber haben Sie jemals darüber nachgedacht, eine Datei mit readlines zu lesen, indem Sie jede Zeile der Datei in den Speicher einlesen? 10G oder 100G und ist zu groß, um im aktuellen Speicher gespeichert zu werden. In diesem Fall ist diese Methode nicht anwendbar.
Die folgende Methode eignet sich besonders für große Dateien.
f1 = open('seasons.txt',mode='r')
für i in f1: #Direkt zum Schleifen des Dateihandles werden nicht alle Dateien auf einmal gelesen Speicher, liest aber eine Zeile aus der Datei.
line_bytes = -36
while True:
f1.seek(line_bytes,2)
data = f1.readlines()
if len(data) > 1:
print data[-1]
break
else:
line_bytes * 2
Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in die Dateiverarbeitung in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!