Kā pievienot failu Python programmā?

Kā pievienot failu, nevis to pārrakstīt? Vai ir kāda īpaša funkcija, kas pievieno failu?

Risinājums
with open("test.txt", "a") as myfile:
    myfile.write("appended text")
Komentāri (16)

Jums ir jāatver fails pievienošanas režīmā, iestatot "a" vai "ab" kā režīmu. Skatīt open().

Atverot failu ar "a" režīmu, rakstīšanas pozīcija vienmēr būs faila beigās (pievienošana). Varat atvērt ar "a+", lai atļautu lasīšanu, meklēšanu atpakaļ un lasīšanu (bet visi ieraksti joprojām būs faila beigās!).

Piemērs:

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

Piezīme: Izmantojot 'a', tas nav tas pats, kas atvērt ar 'w' un meklēt līdz faila beigām - apsveriet, kas varētu notikt, ja cita programma atvērtu failu un sāktu rakstīt starp meklēšanu un rakstīšanu. Dažās operētājsistēmās faila atvēršana ar 'a' garantē, ka visi nākamie ieraksti tiks pievienoti faila galam atomāri (pat tad, ja fails palielinās, veicot citus ierakstus).


Vēl dažas sīkākas ziņas par to, kā darbojas "a" režīms (pārbaudīts tikai Linux sistēmā). Pat ja jūs meklējat atpakaļ, katrs ieraksts tiks pievienots faila beigām:

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

Patiesībā fopen rokasgrāmata norāda:

Datnes atvēršana pievienošanas režīmā (a kā pirmais režīmā rakstītais simbols). izraisa, ka visas turpmākās rakstīšanas operācijas uz šo plūsmu notiek pie faila beigās, it kā pirms izsaukuma:

fseek(stream, 0, SEEK_END);


Vecā vienkāršotā atbilde (neizmantojot with):

Piemērs: (reālā programmā lieto with, lai aizvērtu failu - skat. dokumentāciju)

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

Iespējams, kā argumentu par režīmu vēlaties izmantot "a". Skatiet open() dokumentāciju.

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

Ir arī citas režīma argumenta permutācijas atjaunināšanas (+), saīsināšanas (w) un binārajam (b) režīmam, bet vislabāk ir sākt tikai ar "a".

Komentāri (2)