Python'da bir dosyaya nasıl ekleme yaparsınız?

Dosyanın üzerine yazmak yerine dosyaya nasıl ekleme yaparsınız? Dosyaya ekleme yapan özel bir fonksiyon var mı?

Çözüm
with open("test.txt", "a") as myfile:
    myfile.write("appended text")
Yorumlar (16)

Mod olarak "a" veya "ab" ayarlayarak dosyayı ekleme modunda açmanız gerekir. Bakınız open().

a" modu ile açtığınızda, yazma konumu her zaman dosyanın sonunda olacaktır (bir ekleme). Okumaya, geriye doğru aramaya ve okumaya izin vermek için "a+" ile açabilirsiniz (ancak tüm yazmalar yine de dosyanın sonunda olacaktır!).

Örnek:

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

Not: 39;a' kullanmak, 'w' ile açıp dosyanın sonuna kadar aramakla aynı şey değildir - başka bir program dosyayı açıp arama ve yazma arasında yazmaya başlarsa neler olabileceğini düşünün. Bazı işletim sistemlerinde, dosyayı 'a' ile açmak, sonraki tüm yazmalarınızın dosyanın sonuna atomik olarak ekleneceğini garanti eder (dosya diğer yazmalarla büyüse bile).


a" modunun nasıl çalıştığı hakkında birkaç ayrıntı daha (sadece Linux üzerinde test edilmiştir). Geri arama yapsanız bile, her yazma işlemi dosyanın sonuna eklenir:

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

Aslında, fopen manpage şunu belirtir:

Bir dosyayı ekleme modunda açma (modun ilk karakteri olarak a) bu akışa sonraki tüm yazma işlemlerinin şu adreste gerçekleşmesine neden olur dosya sonu, sanki çağrıdan önce gelmiş gibi:

fseek(stream, 0, SEEK_END);


Eski basitleştirilmiş cevap (with kullanmadan):

Örnek: (gerçek bir programda dosyayı kapatmak için with kullanın - belgelere bakın)

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

Muhtemelen mod argümanı olarak "a" geçmek istersiniz. open()]1 için dokümanlara bakın.

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

Güncelleme (+), kesme (w) ve ikili (b) modu için mod bağımsız değişkeninin başka permütasyonları da vardır, ancak sadece "a" ile başlamak en iyi seçeneğinizdir.

Yorumlar (2)