it-swarm.com.de

Python - Wann soll ich "file vs open" verwenden?

Was ist der Unterschied zwischen file und open in Python? Wann soll ich welches verwenden? (Angenommen, ich bin in 2,5)

136
Greg

Sie sollten immer open() verwenden.

Wie die Dokumentation besagt:

Verwenden Sie beim Öffnen einer Datei vorzugsweise open (), anstatt diesen Konstruktor direkt aufzurufen. file eignet sich besser zum Testen von Typen (z. B. "isinstance (f, file)" schreiben).

Auch file()wurde entfernt since Python 3.0.

152
nosklo

Zwei Gründe: Die python Philosophie "Es sollte einen Weg geben, es zu tun" und file geht weg.

file ist der tatsächliche Typ (mit file('myfile.txt') wird der Konstruktor aufgerufen). open ist eine Factory-Funktion, die ein Dateiobjekt zurückgibt.

In python 3.0 wird file von einem eingebauten zu einem von mehreren Klassen in der io-Bibliothek implementierten Python (etwas ähnlich wie Java mit gepufferten Readern usw.)

32
Ryan

file() ist ein Typ wie ein Int oder eine Liste. open() ist eine Funktion zum Öffnen von Dateien und gibt ein file -Objekt zurück.

Dies ist ein Beispiel dafür, wann Sie open verwenden sollten:

f = open(filename, 'r')
for line in f:
    process(line)
f.close()

Dies ist ein Beispiel dafür, wann Sie file verwenden sollten:

class LoggingFile(file):
    def write(self, data):
        sys.stderr.write("Wrote %d bytes\n" % len(data))
        super(LoggingFile, self).write(data)

Wie Sie sehen, gibt es einen guten Grund für beides und einen klaren Anwendungsfall für beides.

19
Jerub

Funktionell sind die beiden gleich; open ruft ohnehin file auf, daher ist der Unterschied derzeit eine Frage des Stils. Die Python-Dokumente empfehlen die Verwendung von open.

Verwenden Sie beim Öffnen einer Datei vorzugsweise open (), anstatt den Dateikonstruktor direkt aufzurufen.

Der Grund dafür ist, dass in zukünftigen Versionen nicht garantiert wird, dass sie gleich sind (open wird zu einer Factory-Funktion, die je nach Pfad Objekte unterschiedlichen Typs zurückgibt).

7
dF.

Verwenden Sie open () immer nur zum Öffnen von Dateien. file () wird derzeit in 3.0 entfernt und ist derzeit veraltet. Sie hatten eine seltsame Beziehung, aber file () wird jetzt ausgeführt, sodass Sie sich keine Sorgen mehr machen müssen.

Das Folgende stammt aus den von mir hinzugefügten Python 2.6-Dokumenten. [Bracket Stuff].

Verwenden Sie beim Öffnen einer Datei vorzugsweise open (), anstatt diesen Konstruktor [file ()] direkt aufzurufen. Datei eignet sich besser zum Testen von Typen (z. B. Schreiben von isinstance (f, file)

4

Laut Herrn Van Rossum sollten Sie open () verwenden, obwohl open () derzeit ein Alias ​​für file () ist, da sich dies in Zukunft ändern könnte.

2
Martin Beckett