Hoe append je naar een bestand in Python?

Hoe voeg je iets toe aan het bestand in plaats van het te overschrijven? Is er een speciale functie die append naar het bestand?

Oplossing
with open("test.txt", "a") as myfile:
    myfile.write("appended text")
Commentaren (16)

U moet het bestand openen in append modus, door "a" of "ab" in te stellen als modus. Zie open().

Wanneer u opent met "a" modus, zal de schrijfpositie altijd aan het einde van het bestand zijn (een append). U kunt openen met "a+" om lezen, achteruit zoeken en lezen toe te staan (maar alle schrijfposities zullen nog steeds aan het eind van het bestand zijn!).

Voorbeeld:

>>> 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'

Noot: Het gebruik van 'a' is niet hetzelfde als openen met 'w' en zoeken naar het einde van het bestand - bedenk wat er zou kunnen gebeuren als een ander programma het bestand opent en begint te schrijven tussen het zoeken en het schrijven. Op sommige besturingssystemen garandeert het openen van het bestand met 'a' dat al je volgende schrijfbewerkingen atomair aan het einde van het bestand worden toegevoegd (zelfs als het bestand groeit door andere schrijfbewerkingen).


Nog een paar details over hoe de "a" modus werkt (alleen getest op Linux). Zelfs als u terugzoekt, zal elke schrijfopdracht aan het einde van het bestand worden toegevoegd:

>>> 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'

In feite zegt de fopen manpage:

Het openen van een bestand in append mode (a als het eerste karakter van mode) zorgt ervoor dat alle volgende schrijfoperaties naar deze stream plaatsvinden op einde-van-bestand, alsof de aanroep voorafging:

fseek(stream, 0, SEEK_END);


Oud vereenvoudigd antwoord (zonder with te gebruiken):

Voorbeeld: (in een echt programma gebruik with om het bestand te sluiten - zie de documentatie)

>>> open("test","wb").write("test")
>>> open("test","a+b").write("koko")
>>> open("test","rb").read()
'testkoko'
Commentaren (3)

Je wilt waarschijnlijk "a" doorgeven als het mode argument. Zie de docs voor open().

with open("foo", "a") as f:
    f.write("cool beans...")

Er zijn andere permutaties van het mode argument voor updating (+), truncating (w) en binary (b) mode, maar beginnen met alleen "a" is je beste gok.

Commentaren (2)