2010-05-03 10 views
34

Ho bisogno di aprire un file per leggere e scrivere. Se il file non viene trovato, dovrebbe essere creato. Dovrebbe anche essere trattato come un binario per Windows. Puoi dirmi la sequenza di modalità file che devo usare per questo?Modalità file per creazione + lettura + aggiunta + binario

Ho provato 'r + ab' ma questo non crea i file se non vengono trovati.

Grazie

risposta

56

La modalità è ab+ il r è implicito e 'a'ppend e (' w'rite '+' 'r') sono ridondanti. Dal momento che il CPython (cioè regolare python) file si basa sul C stdio FILE tipo, qui ci sono le linee interessate dalle fopen (3) pagina man:

  • w + Open per la lettura e la scrittura. Il file viene creato se non esiste , altrimenti viene troncato. Lo stream è posizionato all'inizio del file .

  • a + Aperto per la lettura e l'accodamento (scrittura alla fine del file). Il file viene creato se non esiste . La posizione iniziale del file per la lettura è all'inizio del file , ma l'output è sempre aggiunto alla fine del file.

Con la "b" attaccata per rendere felice DOS. Presumibilmente si desidera fare qualcosa di simile:

>>> f = open('junk', 'ab+') 
>>> f 
<open file 'junk', mode 'ab+' at 0xb77e6288> 
>>> f.write('hello\n') 
>>> f.seek(0, os.SEEK_SET) 
>>> f.readline() 
'hello\n' 
>>> f.write('there\n') 
>>> f.seek(0, os.SEEK_SET) 
>>> f.readline() 
'hello\n' 
>>> f.readline() 
'there\n' 
+2

Opere. Grazie anche per aver segnalato os.SEEK_SET nel tuo esempio. Penso di aver provato ad aprire il file con un + prima, ma non ho potuto leggere nulla da esso. Non ho pensato che il flusso fosse posto alla fine del file ... –

+1

Ricorda che * devi * * sempre * cercare tra una lettura e una scrittura, o una scrittura e una lettura. Dimenticarsi di farlo di solito funziona sulla maggior parte dei sistemi, ma non su (per esempio) su Windows. –

8
open("filename", "a+b") 

dovrebbero funzionare. Apre un file binario in modalità di aggiunta/aggiornamento.

Problemi correlati