Odpowiedzi:
with open("test.txt", "a") as myfile:
myfile.write("appended text")
with open(file, "a")
metody. Jestem może staroświecki, ale jaka jest przewaga nadopen(file, "a") ... file.close()
print("appended text", file=myfile)
jest również możliwe dla bardziej znanego API.
open()
nie koduje na stałe utf-8
. Używa locale.getpreferredencoding(False)
. Przekaż encoding="utf-8"
parametr jawnie, jeśli wiesz, że plik używa kodowania utf-8.
Musisz otworzyć plik w trybie dołączania, ustawiając „a” lub „ab” jako tryb. Zobacz open () .
Po otwarciu w trybie „a” pozycja zapisu zawsze będzie znajdować się na końcu pliku (dodatek). Możesz otworzyć za pomocą „+”, aby umożliwić czytanie, szukać wstecz i czytać (ale wszystkie zapisy będą nadal na końcu pliku!).
Przykład:
>>> with open('test1','wb') as f:
f.write('test')
>>> with open('test1','ab') as f:
f.write('koko')
>>> with open('test1','rb') as f:
f.read()
'testkoko'
Uwaga : Używanie „a” nie jest tym samym, co otwieranie za pomocą „w” i szukanie do końca pliku - zastanów się, co może się stać, jeśli inny program otworzy plik i zacznie pisać między wyszukiwaniem a zapisem. W niektórych systemach operacyjnych otwarcie pliku za pomocą „a” gwarantuje, że wszystkie kolejne zapisy zostaną dodane atomowo na końcu pliku (nawet gdy plik rośnie w wyniku innych zapisów).
Kilka dodatkowych szczegółów na temat działania trybu „a” ( testowane tylko w systemie Linux ). Nawet jeśli będziesz szukać wstecz, każdy zapis będzie dołączany na końcu pliku:
>>> 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'
W rzeczywistości, fopen
podręcznika stwierdza:
Otwarcie pliku w trybie dołączania (a jako pierwszy znak trybu) powoduje, że wszystkie kolejne operacje zapisu do tego strumienia mają miejsce na końcu pliku, tak jakby poprzedzał wywołanie:
fseek(stream, 0, SEEK_END);
with
):Przykład: ( w prawdziwym programie użyj with
do zamknięcia pliku - patrz dokumentacja )
>>> open("test","wb").write("test")
>>> open("test","a+b").write("koko")
>>> open("test","rb").read()
'testkoko'
close()
?
with
- patrz docs.python.org/2/whatsnew/2.6.html#pep-343-the-with-statement
Zawsze to robię
f = open('filename.txt', 'a')
f.write("stuff")
f.close()
To proste, ale bardzo przydatne.
f
zmienną do innych funkcji, ta sama funkcja, która otwiera plik, powinna go zamknąć. with
Składnia jest preferowanym sposobem do osiągnięcia tego celu.
Prawdopodobnie chcesz przekazać "a"
jako argument trybu. Zobacz dokumentację open () .
with open("foo", "a") as f:
f.write("cool beans...")
Istnieją inne kombinacje argumentu mode dla trybu aktualizacji (+), obcinania (w) i binarnego (b), ale rozpoczęcie od właśnie "a"
jest najlepszym wyborem.
file
rzuca cień na wbudowaną funkcję. Nie używaj go do zmiennych.
file
nie jest już wbudowany w Python 3. Nawet w Python 2 jest używany bardzo rzadko . Otwieranie pliku jest częstą operacją. Można file
tutaj używać nazwy zarówno w Pythonie 2, jak i 3. Wiedzieć, kiedy być niespójnym.
Python ma wiele odmian poza głównymi trzema trybami, te trzy tryby to:
'w' write text
'r' read text
'a' append text
Tak więc dodanie do pliku jest tak proste, jak:
f = open('filename.txt', 'a')
f.write('whatever you want to write here (in append mode) here.')
Są też tryby, które po prostu zmniejszają liczbę wierszy kodu:
'r+' read + write text
'w+' read + write text
'a+' append + read text
Wreszcie istnieją tryby odczytu / zapisu w formacie binarnym:
'rb' read binary
'wb' write binary
'ab' append binary
'rb+' read + write binary
'wb+' read + write binary
'ab+' append + read binary
gdy korzystamy z tego wiersza open(filename, "a")
, który a
oznacza dołączenie pliku, oznacza to, że pozwala na wstawienie dodatkowych danych do istniejącego pliku.
Możesz po prostu użyć poniższych wierszy, aby dodać tekst w pliku
def FileSave(filename,content):
with open(filename, "a") as myfile:
myfile.write(content)
FileSave("test.txt","test1 \n")
FileSave("test.txt","test2 \n")
Można również zrobić to print
zamiast write
:
with open('test.txt', 'a') as f:
print('appended text', file=f)
Jeśli test.txt nie istnieje, zostanie utworzony ...
WRITE_TO_FILE = open('my_file.txt', mode='a')
, a następnie podczas swojego programu możesz mieć kilka wydruków takich print('Hello world', file=WRITE_TO_FILE)
, a kiedy tylko zdecydujesz się zobaczyć wyjście na konsoli, po prostu zmień flagę na WRITE_TO_FILE = None
. Nie zapomnij zamknąć pliku na końcu, jeśli nie jestNone
Możesz także otworzyć plik w r+
trybie, a następnie ustawić pozycję pliku na końcu pliku.
import os
with open('text.txt', 'r+') as f:
f.seek(0, os.SEEK_END)
f.write("text to add")
Otwarcie pliku w r+
trybie pozwoli Ci napisać do innych pozycjach plików oprócz końcu, podczas a
i a+
siła pisania do końca.
jeśli chcesz dołączyć do pliku
with open("test.txt", "a") as myfile:
myfile.write("append me")
Zadeklarowaliśmy zmienną, myfile
aby otworzyć plik o nazwie test.txt
. Otwórz przyjmuje 2 argumenty, plik, który chcemy otworzyć, oraz ciąg znaków reprezentujący rodzaje uprawnień lub operacji, które chcemy wykonać na pliku
oto opcje trybu pliku
Tryb Opis „r” To jest tryb domyślny. Otwiera plik do odczytu. „w” Ten tryb Otwiera plik do zapisu. Jeśli plik nie istnieje, tworzy nowy plik. Jeśli plik istnieje, obcina plik. „x” Tworzy nowy plik. Jeśli plik już istnieje, operacja nie powiedzie się. „a” Otwórz plik w trybie dołączania. Jeśli plik nie istnieje, tworzy nowy plik. „t” To jest tryb domyślny. Otwiera się w trybie tekstowym. „b” Otwiera się w trybie binarnym. „+” Spowoduje to otwarcie pliku do odczytu i zapisu (aktualizacja)
W 'a'
oznacza parametr trybie dopisywania. Jeśli nie chcesz używać za with open
każdym razem, możesz łatwo napisać funkcję, która zrobi to za Ciebie:
def append(txt='\nFunction Successfully Executed', file):
with open(file, 'a') as f:
f.write(txt)
Jeśli chcesz napisać w innym miejscu niż koniec, możesz użyć 'r+'
† :
import os
with open(file, 'r+') as f:
f.seek(0, os.SEEK_END)
f.write("text to add")
Wreszcie 'w+'
parametr zapewnia jeszcze więcej swobody. W szczególności umożliwia utworzenie pliku, jeśli nie istnieje, a także opróżnienie zawartości pliku, który obecnie istnieje.
Najprostszym sposobem dodania większej ilości tekstu na końcu pliku byłoby użycie:
with open('/path/to/file', 'a+') as file:
file.write("Additions to file")
file.close()
Instrukcja a+
in open(...)
nakazuje otworzyć plik w trybie dołączania i umożliwia dostęp do odczytu i zapisu.
Dobrą praktyką jest również file.close()
zamykanie wszelkich plików, które otworzyłeś po zakończeniu ich używania.
Oto mój skrypt, który w zasadzie liczy liczbę linii, następnie dodaje, a następnie zlicza je ponownie, abyś miał dowody, że zadziałało.
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):
pass
print "%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 write
while 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):
pass
print "%s has %i lines after appending new lines" %(long_path, i)
long.close()