Dies aus dem Tutorial kann ebenfalls nützlich sein.
Dan
28
Mir ist aufgefallen, dass viele Leute die with open(file, "a")Methode anwenden. Ich bin vielleicht altmodisch, aber was ist der Vorteil gegenüberopen(file, "a") ... file.close()
75
bluewoodtree: Die Vorteile ähneln denen von RAII in C ++. Wenn Sie close () vergessen, kann es eine Weile dauern, bis die Datei tatsächlich geschlossen wird. Es ist einfacher, dass Sie denken, es zu vergessen, wenn der Code mehrere Austrittspunkte, Ausnahmen usw. hat.
Petter
54
print("appended text", file=myfile)ist auch für eine bekanntere API möglich.
Thomas Ahle
206
Sie müssen die Datei im Anhänge-Modus öffnen, indem Sie "a" oder "ab" als Modus festlegen. Siehe open () .
Wenn Sie im Modus "a" öffnen, befindet sich die Schreibposition immer am Ende der Datei (Anhängen). Sie können mit "a +" öffnen, um das Lesen zu ermöglichen, rückwärts zu suchen und zu lesen (aber alle Schreibvorgänge befinden sich noch am Ende der Datei!).
Hinweis : Die Verwendung von 'a' ist nicht dasselbe wie das Öffnen mit 'w' und das Suchen bis zum Ende der Datei. Überlegen Sie, was passieren kann, wenn ein anderes Programm die Datei öffnet und zwischen dem Suchen und dem Schreiben mit dem Schreiben beginnt. Unter einigen Betriebssystemen garantiert das Öffnen der Datei mit 'a', dass alle folgenden Schreibvorgänge atomar an das Ende der Datei angehängt werden (auch wenn die Datei durch andere Schreibvorgänge wächst).
Einige weitere Details zur Funktionsweise des "a" -Modus ( nur unter Linux getestet ). Selbst wenn Sie zurück suchen, wird jeder Schreibvorgang an das Ende der Datei angehängt:
>>> f = open('test','a+')# Not using 'with' just to simplify the example REPL session>>> f.write('hi')>>> f.seek(0)>>> f.read()'hi'>>> f.seek(0)>>> f.write('bye')# Will still append despite the seek(0)!>>> f.seek(0)>>> f.read()'hibye'
Das Öffnen einer Datei im Append-Modus (a als erstes Zeichen des Modus) führt dazu, dass alle nachfolgenden Schreibvorgänge in diesen Stream am Dateiende ausgeführt werden, als ob sie dem Aufruf vorausgehen:
fseek(stream,0, SEEK_END);
Alte vereinfachte Antwort (nicht verwendet with):
Beispiel: ( in einem realen Programm verwenden , withum die Datei zu schließen - siehe die Dokumentation )
Es ist ein bisschen schöner und ein bisschen sicherer zu schreiben: mit open ('Dateiname', 'a') als f: f.write ('stuff')
Sam Redway
35
Sie möchten wahrscheinlich "a"als Modusargument übergeben. Siehe open () in den Dokumenten .
with open("foo","a")as f:
f.write("cool beans...")
Es gibt andere Permutationen des Modusarguments zum Aktualisieren (+), Abschneiden (w) und Binärmodus (b), aber mit nur zu beginnen "a"ist die beste Wahl.
wenn wir diese Linie benutzen open(filename, "a"), dasa bedeutet die Datei angehängt wird. bedeutet, dass zusätzliche Daten in die vorhandene Datei eingefügt werden können.
Sie können einfach die folgenden Zeilen verwenden, um den Text in Ihrer Datei anzuhängen
with open("test.txt","a")as myfile:
myfile.write("append me")
Wir haben die Variable deklariert myfile, um eine Datei mit dem Namen zu öffnen test.txt. Open benötigt zwei Argumente, die Datei, die wir öffnen möchten, und eine Zeichenfolge, die die Arten von Berechtigungen oder Operationen darstellt, die wir für die Datei ausführen möchten
Hier finden Sie Optionen für den Dateimodus
Modusbeschreibung
'r' Dies ist der Standardmodus. Es öffnet die Datei zum Lesen.
'w' Dieser Modus Öffnet die Datei zum Schreiben.
Wenn keine Datei vorhanden ist, wird eine neue Datei erstellt.
Wenn eine Datei vorhanden ist, wird die Datei abgeschnitten.
'x' Erstellt eine neue Datei. Wenn die Datei bereits vorhanden ist, schlägt der Vorgang fehl.
'a' Datei im Anhänge-Modus öffnen.
Wenn keine Datei vorhanden ist, wird eine neue Datei erstellt.
't' Dies ist der Standardmodus. Es wird im Textmodus geöffnet.
'b' Dies wird im Binärmodus geöffnet.
'+' Dies öffnet eine Datei zum Lesen und Schreiben (Aktualisieren)
Der 'a'Parameter kennzeichnet den Append-Modus. Wenn Sie nicht with openjedes Mal verwenden möchten , können Sie einfach eine Funktion schreiben, die dies für Sie erledigt:
Wenn Sie an einer anderen Stelle als am Ende schreiben möchten, können Sie 'r+'† verwenden :
import os
with open(file,'r+')as f:
f.seek(0, os.SEEK_END)
f.write("text to add")
Schließlich 'w+'gewährt der Parameter noch mehr Freiheit. Insbesondere können Sie die Datei erstellen, wenn sie nicht vorhanden ist, und den Inhalt einer aktuell vorhandenen Datei leeren.
"file.close" wird automatisch am Ende des "with" -Blocks aufgerufen, was der Vorteil des Schlüsselworts ist. Außerdem fragte das OP nach dem Öffnen einer Datei zum Anhängen. Der "+" - Modus ist nur erforderlich, wenn Sie ebenfalls lesen möchten.
Erik Knowles
-6
Hier ist mein Skript, das im Grunde die Anzahl der Zeilen zählt, dann anhängt und sie dann erneut zählt, damit Sie Beweise dafür haben, dass es funktioniert hat.
shortPath ="../file_to_be_appended"
short = open(shortPath,'r')## this counts how many line are originally in the file:
long_path ="../file_to_be_appended_to"
long = open(long_path,'r')for i,l in enumerate(long):passprint"%s has %i lines initially"%(long_path,i)
long.close()
long = open(long_path,'a')## now open long file to append
l =True## will be a line
c =0## count the number of lines you writewhile l:try:
l = short.next()## when you run out of lines, this breaks and the except statement is run
c +=1
long.write(l)except:
l =None
long.close()print"Done!, wrote %s lines"%c
## finally, count how many lines are left.
long = open(long_path,'r')for i,l in enumerate(long):passprint"%s has %i lines after appending new lines"%(long_path, i)
long.close()
with open(file, "a")
Methode anwenden. Ich bin vielleicht altmodisch, aber was ist der Vorteil gegenüberopen(file, "a") ... file.close()
print("appended text", file=myfile)
ist auch für eine bekanntere API möglich.Sie müssen die Datei im Anhänge-Modus öffnen, indem Sie "a" oder "ab" als Modus festlegen. Siehe open () .
Wenn Sie im Modus "a" öffnen, befindet sich die Schreibposition immer am Ende der Datei (Anhängen). Sie können mit "a +" öffnen, um das Lesen zu ermöglichen, rückwärts zu suchen und zu lesen (aber alle Schreibvorgänge befinden sich noch am Ende der Datei!).
Beispiel:
Hinweis : Die Verwendung von 'a' ist nicht dasselbe wie das Öffnen mit 'w' und das Suchen bis zum Ende der Datei. Überlegen Sie, was passieren kann, wenn ein anderes Programm die Datei öffnet und zwischen dem Suchen und dem Schreiben mit dem Schreiben beginnt. Unter einigen Betriebssystemen garantiert das Öffnen der Datei mit 'a', dass alle folgenden Schreibvorgänge atomar an das Ende der Datei angehängt werden (auch wenn die Datei durch andere Schreibvorgänge wächst).
Einige weitere Details zur Funktionsweise des "a" -Modus ( nur unter Linux getestet ). Selbst wenn Sie zurück suchen, wird jeder Schreibvorgang an das Ende der Datei angehängt:
In der Tat heißt es auf der
fopen
Manpage :Alte vereinfachte Antwort (nicht verwendet
with
):Beispiel: ( in einem realen Programm verwenden ,
with
um die Datei zu schließen - siehe die Dokumentation )quelle
Ich mache das immer,
Es ist einfach, aber sehr nützlich.
quelle
Sie möchten wahrscheinlich
"a"
als Modusargument übergeben. Siehe open () in den Dokumenten .Es gibt andere Permutationen des Modusarguments zum Aktualisieren (+), Abschneiden (w) und Binärmodus (b), aber mit nur zu beginnen
"a"
ist die beste Wahl.quelle
file
beschattet eine eingebaute Funktion. Verwenden Sie es nicht für Variablen.file
ist in Python 3 nicht mehr integriert. Selbst in Python 2 wird es sehr selten verwendet . Das Öffnen einer Datei ist eine übliche Operation. Es ist in Ordnung,file
hier sowohl in Python 2 als auch inPython hat viele Variationen der drei Hauptmodi. Diese drei Modi sind:
Das Anhängen an eine Datei ist also so einfach wie:
Dann gibt es die Modi, die Ihren Code nur weniger Zeilen machen:
Schließlich gibt es die Modi Lesen / Schreiben im Binärformat:
quelle
wenn wir diese Linie benutzen
open(filename, "a")
, dasa
bedeutet die Datei angehängt wird. bedeutet, dass zusätzliche Daten in die vorhandene Datei eingefügt werden können.Sie können einfach die folgenden Zeilen verwenden, um den Text in Ihrer Datei anzuhängen
quelle
Sie können es auch mit tun
print
stattwrite
:Wenn test.txt nicht existiert, wird es erstellt ...
quelle
Sie können die Datei auch im
r+
Modus öffnen und dann die Dateiposition auf das Ende der Datei setzen.Wenn Sie die Datei im
r+
Modus öffnen, können Sie neben dem Ende an andere Dateipositionen schreibena
und dasa+
Schreiben bis zum Ende erzwingen.quelle
Wenn Sie an eine Datei anhängen möchten
Wir haben die Variable deklariert
myfile
, um eine Datei mit dem Namen zu öffnentest.txt
. Open benötigt zwei Argumente, die Datei, die wir öffnen möchten, und eine Zeichenfolge, die die Arten von Berechtigungen oder Operationen darstellt, die wir für die Datei ausführen möchtenHier finden Sie Optionen für den Dateimodus
quelle
Der
'a'
Parameter kennzeichnet den Append-Modus. Wenn Sie nichtwith open
jedes Mal verwenden möchten , können Sie einfach eine Funktion schreiben, die dies für Sie erledigt:Wenn Sie an einer anderen Stelle als am Ende schreiben möchten, können Sie
'r+'
† verwenden :Schließlich
'w+'
gewährt der Parameter noch mehr Freiheit. Insbesondere können Sie die Datei erstellen, wenn sie nicht vorhanden ist, und den Inhalt einer aktuell vorhandenen Datei leeren.† Die Gutschrift für diese Funktion geht an @Primusa
quelle
Der einfachste Weg, mehr Text an das Ende einer Datei anzuhängen, ist die Verwendung von:
Die Anweisung
a+
in deropen(...)
Anweisung weist an, die Datei im Anhänge-Modus zu öffnen, und ermöglicht Lese- und Schreibzugriff.Es wird auch immer empfohlen,
file.close()
alle Dateien zu schließen, die Sie geöffnet haben, sobald Sie sie verwendet haben.quelle
Hier ist mein Skript, das im Grunde die Anzahl der Zeilen zählt, dann anhängt und sie dann erneut zählt, damit Sie Beweise dafür haben, dass es funktioniert hat.
quelle