Kaip "Python" programa pridėti failą prie failo?

Kaip pridėti prie failo, o ne jį perrašyti? Ar yra speciali funkcija, kuri prideda failą?

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

Failą reikia atidaryti prijungimo režimu, nustatant "a" arba "ab" kaip režimą. Žr. open().

Atidarant "a" režimu, įrašymo vieta visada bus failo pabaigoje (prijungimas). Galite atidaryti "a+" režimu, kad būtų galima skaityti, ieškoti atgal ir skaityti (tačiau visi įrašai vis tiek bus failo pabaigoje!).

Pavyzdys:

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

Pastaba: Naudojant 'a' nėra tas pats, kas atidarant su 'w' ir ieškant failo pabaigos - pagalvokite, kas gali nutikti, jei kita programa atidarys failą ir pradės rašyti tarp ieškojimo ir rašymo. Kai kuriose operacinėse sistemose failo atidarymas su 'a' garantuoja, kad visi tolesni įrašai bus atomiškai pridėti prie failo pabaigos (net jei failas didėja dėl kitų įrašų).


Dar keletas detalių apie tai, kaip veikia "a" režimas (išbandyta tik Linux sistemoje). Net jei ieškosite atgal, kiekvienas įrašymas bus pridedamas prie failo pabaigos:

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

Iš tikrųjų fopen vadovo puslapyje teigiama:

Failo atidarymas pridėjimo režimu (a kaip pirmasis režimo simbolis) lemia, kad visos vėlesnės šio srauto įrašymo operacijos bus atliekamos failo pabaigoje, tarsi prieš tai būtų buvęs iškvietimas:

fseek(stream, 0, SEEK_END);


Senas supaprastintas atsakymas (nenaudojant with):

Pavyzdys: ( tikroje programoje failui uždaryti panaudokite with - žr. dokumentaciją)

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

Tikriausiai norėsite perduoti "a" kaip režimo argumentą. Žr. open() dokumentus.

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

Yra ir kitų režimo argumento permutacijų, skirtų atnaujinimo (+), sutrumpinimo (w) ir dvejetainiam (b) režimui, tačiau geriausia pradėti tik nuo "a".

Komentarai (2)