Hvordan legger du til en fil i Python?

Hvordan legger du til filen i stedet for å overskrive den? Finnes det en spesiell funksjon som legger til filen?

Løsning
with open("test.txt", "a") as myfile:
    myfile.write("appended text")
Kommentarer (16)

Du må åpne filen i append-modus ved å angi "a" eller "ab" som modus. Se open().

Når du åpner med modus "a", vil skriveposisjonen alltid være på slutten av filen (en append). Du kan åpne med "a+" for å tillate lesing, søke bakover og lese (men alle skrivinger vil fortsatt være på slutten av filen!).

Eksempel:

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

Bemerkning: Å bruke 'a' er ikke det samme som å åpne med 'w' og søke til slutten av filen - tenk på hva som kan skje hvis et annet program åpner filen og begynner å skrive mellom søket og skrivingen. På noen operativsystemer garanterer det å åpne filen med 'a' at alle påfølgende skrivinger blir lagt atomisk til slutten av filen (selv om filen vokser med andre skrivinger).


Noen flere detaljer om hvordan modusen "a" fungerer (kun testet på Linux). Selv om du søker tilbake, vil hver skriving legges til slutten av filen:

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

Faktisk står det i fopen manpage:

Å åpne en fil i append-modus (a som første tegn i modus) fører til at alle påfølgende skriveoperasjoner til denne strømmen vil skje ved slutten av filen, som om de ble utført før anropet:

fseek(stream, 0, SEEK_END);


Gammelt forenklet svar (bruker ikke with):

Eksempel: (i et ekte program bruker du with for å lukke filen - se dokumentasjonen)

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

Du vil sannsynligvis sende "a" som modus-argument. Se dokumentasjonen for open().

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

Det finnes andre permutasjoner av modus-argumentet for oppdatering (+), trunkering (w) og binær (b) modus, men det beste er å starte med "a".

Kommentarer (2)