Non sono d'accordo con alcune delle opinioni espresse qui, che print >> f
è ridondante e dovrebbe essere evitato a favore di f.write
.
print
e file.write
sono operazioni abbastanza diverse. file.write
scrive direttamente una stringa in un file. print
è più simile a "visualizza valori su stdout come testo". Naturalmente, il risultato del rendering di una stringa come testo è solo la stringa, quindi print >> f, my_string
e f.write(my_string)
sono quasi intercambiabili (tranne che per l'aggiunta di una nuova riga). Ma la tua scelta tra file.write
e print
dovrebbe essere basata su quello che stai facendo; stai scrivendo una stringa su un file o stai visualizzando i valori su un file?
Certo, print
non è strettamente necessario, in quanto è possibile implementarlo con file.write
. Ma allora file.write
non è strettamente necessario, perché è possibile implementarlo con le operazioni in os
per gestire i descrittori di file. In realtà sono operazioni su diversi livelli e dovresti usare quello che ritieni più appropriato per il tuo utilizzo (normalmente il livello su cui sta lavorando il codice vicino o il livello più alto che non ti intralcia).
Ritengo che la sintassi dello sia piuttosto orribile e rappresenta un ottimo esempio del perché print
avrebbe dovuto essere una funzione per tutto il tempo. Questo è molto migliorato in Python 3. Ma anche se stai scrivendo il codice Python 2 che hai intenzione di eseguire il porting su Python 3, è molto più facile convertire print >> f, thing1, thing2, thing3, ...
in print(thing1, thing2, thing3, file=f)
piuttosto che convertire la circonlocuzione in cui rotoli il tuo codice per fare l'equivalente del rendering di print
e quindi chiamare f.write(text)
. Sono abbastanza sicuro che il convertitore semiautomatico da Python 2 a Python 3 farà anche la conversione per te, cosa che non potrebbe fare se si evita il modulo print >> f
.
Riga inferiore: utilizzare print
per eseguire il rendering dei valori su stdout (o su un file). Utilizzare f.write
per scrivere testo in un file.
È pitonico essere esplicito. '.write() 'esprime il tuo intento più chiaramente di' >> ' –
Correggimi se ho torto, ma con le versioni più recenti di Python (3.x) print è una * funzione * (non un costrutto di dichiarazione di sintassi speciale) e quindi il quest'ultimo non funzionerà nemmeno su quelli? (Non ho davvero usato Python da ... 2.6ish.) –
@pst: ottimo punto. Tanto meglio usare il metodo 'write()'. – voithos