2015-07-25 15 views
6

this question numaralı truncate numaralı yanıtların yanıtı, bir dosyanın konumunu gerçekten hareket ettirmiyor.Python 3'te bir dosyayı sıfıra düşürürsem, sıfıra ulaşmak için de mi ihtiyacım var?

Benim sorum şu ki, truncate bir dosyayı okuduktan sonra sıfır uzunluğundaki bir dosya (eğer baştan yazmak istediğim için) 0/numaralı telefonu aramam gerekir. dosyanın başlangıcı?

Bu biraz fazlalık görünüyor çünkü sıfır uzunluğundaki dosya başlangıçta sağda olmalıydı?

cevap

9

Evet, 0 konumuna aramak gerekecek yuvarlayan tamsayı dosya işaretçisi güncelleme değildir: o zaman 0 olarak kesiliyor, 6 bayt Yazma

>>> with open('/tmp/test', 'w') as test: 
...  test.write('hello!') 
...  test.flush() 
...  test.truncate(0) 
...  test.tell() 
... 
6 
0 
6 

hala pozisyonunda dosya işaretçisi sol 6.

Böyle bir dosyaya ek veri eklemeye çalışırken NULL bayt veya çöp verisi başlangıçta başlıyor:

>>> with open('/tmp/test', 'w') as test: 
...  test.write('hello!') 
...  test.flush() 
...  test.truncate(0) 
...  test.write('world') 
...  test.tell() 
... 
6 
0 
5 
11 
>>> with open('/tmp/test', 'r') as test: 
...  print(repr(test.read())) 
... 
'\x00\x00\x00\x00\x00\x00world' 
İlgili konular