2011-07-11 17 views
119

Hem okumak hem de yazmak için bir dosya açmanın bir yolu var mı? Bunun için "r +" olduğunu düşündüm.
İkili dosyalar üzerinde çalıştığım için "r + b" modunu denedim, ancak dosyanın okumaya açık olmadığına dair bir hata alıyorum. Aynı anda okuma ve yazma için standart mod olanHem okuma hem de yazma için açık dosya?

+3

Eğer çözme ne gibi sorunlar? belki de bir dosyayı yazmak/okumaktan daha iyi bir çözüm var, ör. mmap –

+1

Bize kodunuzu verebilir misiniz, böylece size cevap verebiliriz. Bir göz atmaya da çalışabilirsiniz: http://docs.python.org/tutorial/inputoutput.html#reading-and-writing-files. Ancak r + b kullanmaya çalıştım ve işe yarıyor. Ayrıca, farklı fonksiyonlarda bir dosya tanımlayıcısının kullanılması için herhangi bir fayda var mı? –

cevap

30

r+. Bu, file()/open() bu işletim sistemi çağrısı etrafındaki küçük bir sarıcı olduğundan, bu fopen() sistem çağrısı kullanmaktan farklı değildir.

16

Böyle bir şey denedim ve beklendiği gibi çalışır:

f = open("c:\\log.log", 'r+b') 
f.write("\x5F\x9D\x3E") 
f.read(100) 
f.close() 

:

f.read (boyut) - bir dosyanın içeriğini okumak için f.read (boyut çağrı), , bir miktar veri okuyor ve bir dizge olarak döndürüyor.

Ve:

f.write (string) None geri döndürür dosyaya dize yazar.

Ayrıca Python tutorial about reading and writing files açarsanız göreceksiniz:

'r +' okuma ve yazma için dosyayı açar.

Windows'ta, 'b' moduna eklenen dosya ikili modda açılır, yani da 'rb', 'wb' ve 'r + b' gibi modlar da vardır. Eğer bir dosyayı okumak ve sonra (herhangi bir mevcut verilerin üzerine yazarak) buna yazma nasıl İşte

+4

Ayrıca okuma ve yazma 'r + b' modunu kullanarak eşit derecede iyi çalışır, ancak f.read() ve f.write() arasında f.seek (0) 'ı kullanmak zorundasınız. . – gaborous

+0

Yazmakta olduğunuz verilerin oradaki verilerden daha uzun olmaması durumunda, kesilmeyeceğini unutmayın. Bunu durdurmak için 'truncate' yöntemini kullanın. – Flimm

176

kapatıp yeniden açtıktan olmadan var:

with open(filename, "r+") as f: 
    data = f.read() 
    f.seek(0) 
    f.write(output) 
    f.truncate() 
+15

, dosyanın varolmadığı (bu durumda oluşturulacak) son durumun üstünü örtmek için 'a +' komutunu kullanın. –

+9

seek() ve truncate() her ikisi de kritik! – smwikipedia

+1

Bunun, metin eklemek için işe yaramadığını unutmayın. – multigoodverse

İlgili konular