W jaki sposób dołączasz do pliku zamiast go nadpisywać? Czy istnieje jakaś specjalna funkcja, która dołącza do pliku?
Musisz otworzyć plik w trybie dołączania, ustawiając "a" lub "ab" jako tryb. Zobacz open().
Kiedy otwierasz z trybem "a", pozycja zapisu będzie zawsze na końcu pliku (append). Możesz otworzyć z "a+", aby umożliwić czytanie, szukanie wstecz i czytanie (ale wszystkie zapisy nadal będą 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życie 'a' nie jest tożsame z otwarciem z 'w' i szukaniem do końca pliku - zastanów się, co mogłoby się stać, gdyby inny program otworzył plik i zaczął pisać pomiędzy szukaniem a zapisem. W niektórych systemach operacyjnych otwarcie pliku za pomocą 'a' gwarantuje, że wszystkie kolejne zapisy będą dołączane atomowo do końca pliku (nawet jeśli plik rozrasta się o kolejne zapisy).
Kilka więcej szczegółów o tym jak działa tryb "a" (testowane tylko na Linuksie). Nawet jeśli szukasz wstecz, każdy zapis będzie dołączany do końca 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
manpage stwierdza:
Otwarcie pliku w trybie append (a jako pierwszy znak trybu) powoduje, że wszystkie kolejne operacje zapisu do tego strumienia będą miały miejsce na końcu pliku, tak jakby poprzedzało je wywołanie:
fseek(stream, 0, SEEK_END);
with
):Przykład: (w prawdziwym programie używaj with
do zamknięcia pliku - patrz dokumentacja)
>>> open("test","wb").write("test")
>>> open("test","a+b").write("koko")
>>> open("test","rb").read()
'testkoko'
Prawdopodobnie chcesz przekazać "a"
jako argument trybu. Zobacz docs dla open().
with open("foo", "a") as f:
f.write("cool beans...")
Istnieją inne permutacje argumentu mode dla trybu aktualizującego (+), obcinającego (w) i binarnego (b), ale zaczynanie od "a"
jest najlepszym rozwiązaniem.