Forum >> Principianti >> Editing di un file di testo con la funzione open()

Pagina: 1

Cercherò di essere conciso.
Ho creato un file di testo (.txt) e tre script per editarlo. Lo scopo è capire come funzionano gli argomenti 'w', 'a' e 'r+'.

Il primo script utilizza l'argomento 'w':

from sys import argv

script, file_name = argv


document = open(file_name, 'w')

print "Write three lines:"
line1 = raw_input('> ')
line2 = raw_input('> ')
line3 = raw_input('> ')

print "\nEditing the document..."
document.write("%s\n%s\n%s\n" % (line1, line2, line3))

document.close()
print "Operation completed. Goodbye!"

Si comporta come avevo previsto: cancella tutto ciò che c'era scritto nel file, sostituendolo con le tre righe che digita l'utente.


Il secondo script utilizza l'argomento 'a':

from sys import argv

script, file_name = argv


document = open(file_name, 'a')

print "Write three lines:"
line1 = raw_input('> ')
line2 = raw_input('> ')
line3 = raw_input('> ')

print "\nEditing the document..."
document.write("%s\n%s\n%s\n" % (line1, line2, line3))

document.close()
print "Operation completed. Goodbye!"

Anche qui, nulla da eccepire. Nel mio file ho ora un testo di sei righe: le prime tre scritte col primo script, le restanti col secondo.


Veniamo all'ora al terzo script, che utilizza l'argomento 'r+':

from sys import argv

script, file_name = argv


document = open(file_name, 'r+')

print "Write three lines:"
line1 = raw_input('> ')
line2 = raw_input('> ')
line3 = raw_input('> ')

print "\nEditing the document..."
document.write("%s\n%s\n%s\n" % (line1, line2, line3))

document.close()
print "Operation completed. Goodbye!"

Mi aspettavo che questo script aggiungesse altre tre righe all'inizio del file. Lo ha fatto, ma cancellando le tre righe scritte col primo script. Perché?


--- Ultima modifica di ESC in data 2016-03-15 14:26:03 ---
Mi aspettavo che questo script aggiungesse altre tre righe all'inizio del file. Lo ha fatto, ma cancellando le tre righe scritte col primo script. Perché?
Il file viene aperto con r+ è in modalità read e write, col cursore posizionato ad inizio file.

Quando scriverai qualcosa in questa modalità, questa andrà a sovrascrivere quanto è presente, che però non viene cancellato, sia chiaro, all'apertura del file come succederebbe con "w".

Tutto chiaro?

Cya
Non proprio. Credevo che 'r+' si comportasse in modo simile ad 'a', con la differenza che col primo il cursore si posiziona all'inizio del testo, mentre con l'ultimo alla fine. In altre parole, mi aspettavo che l'ultimo script scrivesse tre righe all'inizio del testo, senza però alterare quelle scritte in precedenza. Di fatto, invece, ha sostituito le tre righe che avevo scritto col primo script. E' normale che si comporti così?
EDIT: Oh, leggendo meglio il tuo messaggio, mi pare di capire che hai risposto a questa domanda: dunque, è normale. Giusto? A quanto ho capito leggendo la documentazione, con 'w' e 'w+' il file viene cancellato all'apertura, o addirittura creato qualora non esista. Dico bene?



--- Ultima modifica di ESC in data 2016-02-27 23:45:35 ---
E' normale che si comporti così?

Non so che vuoi dire con normale, si comporta così e non possiamo che prenderne atto.

A quanto ho capito leggendo la documentazione, con 'w' e 'w+' il file viene cancellato all'apertura, o addirittura creato qualora non esista. Dico bene?

w: Truncate file to zero length or create text file for writing. The stream is positioned at the beginning of the file.
w+: Open for reading and writing. The file is created if it does not exist, otherwise it is truncated. The stream is positioned at the beginning of the file.

Quindi è esattamente come dici.

Cya
Perdonami per le mie sciocche insicurezze. Ti ringrazio per il chiarimento! :ok:
Perdonami per le mie sciocche insicurezze. Ti ringrazio per il chiarimento! :ok:
Ma non preoccuparti, non devo perdonarti nulla, figurati.

Buono studio.



Pagina: 1



Esegui il login per scrivere una risposta.