Hogyan lehet egy fájlhoz csatolni Pythonban?

Hogyan csatolja a fájlhoz ahelyett, hogy felülírná azt? Van egy speciális funkció, amely hozzácsatolja a fájlhoz?

Megoldás
with open("test.txt", "a") as myfile:
    myfile.write("appended text")
Kommentárok (16)

A fájlt append módban kell megnyitni, a "a" vagy "ab" beállításával. Lásd open().

Ha "a" módban nyitod meg, az írási pozíció mindig a fájl végén lesz (append). Megnyithatod "a+" módban, hogy lehetővé tedd az olvasást, a hátrafelé keresést és az olvasást (de minden írás továbbra is a fájl végén lesz!).

Példa:

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

Jegyzet: Az 'a' használata nem ugyanaz, mint a 'w' megnyitás és a fájl végére való keresés - gondoljunk arra, hogy mi történhet, ha egy másik program megnyitja a fájlt és a keresés és az írás között elkezd írni. Egyes operációs rendszereken a fájl 'a' -val történő megnyitása garantálja, hogy az összes következő írást atomikusan a fájl végéhez csatolja (még akkor is, ha a fájl más írásokkal növekszik).


Néhány további részlet a "a" mód működéséről (csak Linuxon tesztelve). Még ha vissza is keresünk, minden írás a fájl végéhez csatolódik:

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

Valójában az fopen manpage azt állítja, hogy: "Az fopen manpage a következő:

Fájl megnyitása append módban (a a a mód első karaktere). az összes későbbi írási művelet a folyamra a következő időpontban történik a fájl végén történnek, mintha a hívást megelőzte volna:

fseek(stream, 0, SEEK_END);


Régi egyszerűsített válasz (nem használjuk a with-t):

Példa: (egy valódi programban használjuk a with-t a fájl bezárására - lásd a dokumentációt)

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

Valószínűleg a `"a"-t kell átadni a mode argumentumként. Lásd az open() dokumentációját.

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

A mód argumentumnak vannak más permutációi is a frissítő (+), a csonkoló (w) és a bináris (b) módhoz, de ha csak "a"-val kezdjük, az a legjobb megoldás.

Kommentárok (2)