2015-07-25 6 views
6

In base alle risposte da this question, chiamare truncate in realtà non sposta la posizione di un file.Se ho troncato un file a zero in Python 3 devo anche cercare di posizionare zero?

Quindi la mia domanda è, se io truncate un file a lunghezza zero dopo aver letto qualcosa da esso (perché voglio scrivere dall'inizio) dovrei/devo chiamare anche seek(0) per assicurarmi che io sia al inizio del file?

Questo sembra un po 'ridondante perché il file di lunghezza zero dovrebbe essere all'inizio giusto?

risposta

9

Sì, dovrete cercare di posizione 0, troncamento non aggiorna il puntatore del file:

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

scrittura 6 byte, quindi troncando a 0 ancora a sinistra il puntatore del file alla posizione 6.

Cercando di aggiungere dati aggiuntivi per tale file risultati in byte o caratteri privi di NULL alla partenza:

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