Python - Quando utilizzare file vs open
Domanda
Qual è la differenza tra file
e open
in Python? Quando dovrei usare quale? (Dire che sono in 2.5)
Soluzione
Dovresti sempre usare open ()
.
Come indicato nella documentazione :
Quando si apre un file, è preferibile per usare open () invece di invocarlo costruttore direttamente. il file è di più adatto al test del tipo (ad esempio, scrivere " isinstance (f, file) ").
Inoltre, file ()
è stato rimosso da Python 3.0.
Altri suggerimenti
Due motivi: la filosofia python di " Dovrebbe esserci un modo per farlo " e file
sta scomparendo.
file
è il tipo effettivo (utilizzando ad esempio file ('myfile.txt')
sta chiamando il suo costruttore). open
è una funzione di fabbrica che restituirà un oggetto file.
In Python 3.0 il file
passerà dall'essere integrato all'essere implementato da più classi nella libreria io
(in qualche modo simile a Java con lettori bufferizzati, ecc.)
file ()
è un tipo, come un int o un elenco. open ()
è una funzione per l'apertura di file e restituirà un oggetto file
.
Questo è un esempio di quando dovresti usare open:
f = open(filename, 'r')
for line in f:
process(line)
f.close()
Questo è un esempio di quando dovresti usare il file:
class LoggingFile(file):
def write(self, data):
sys.stderr.write("Wrote %d bytes\n" % len(data))
super(LoggingFile, self).write(data)
Come puoi vedere, c'è una buona ragione per esistere entrambi, e un chiaro caso d'uso per entrambi.
Funzionalmente, i due sono uguali; open
chiamerà comunque file
, quindi attualmente la differenza è una questione di stile. I documenti Python raccomandano di usare open
.
Quando si apre un file, è preferibile utilizzare open () invece di richiamare direttamente il costruttore di file.
Il motivo è che nelle versioni future non è garantito che siano uguali ( open
diventerà una funzione di fabbrica, che restituisce oggetti di diverso tipo a seconda del percorso che sta aprendo).
Usa sempre open () per aprire i file. file () viene effettivamente rimosso in 3.0, ed è deprecato al momento. Hanno avuto una sorta di strana relazione, ma file () sta andando ora, quindi non c'è più bisogno di preoccuparsi.
Quanto segue proviene dai documenti di Python 2.6. [parentesi quadre] aggiunta da me.
Quando si apre un file, è preferibile usare open () invece di invocare direttamente questo costruttore [file ()]. il file è più adatto alla verifica del tipo (ad esempio, la scrittura di isinstance (f, file)
Secondo Van Rossum, sebbene open () sia attualmente un alias per file () dovresti usare open () perché questo potrebbe cambiare in futuro.