Nehmen wir an, wir wollen ein Äquivalent der PHP file_get_content
implementieren.Wie bekomme ich Inhalt einer kleinen Ascii-Datei in Python?
Was ist die beste Vorgehensweise? (elegant und zuverlässig)
Hier sind einige Vorschläge, sind sie richtig?
mit with
Anweisung:
def file_get_contents(filename):
with file(filename) as f:
s = f.read()
return s
wird unter Verwendung von Standard open()
sicher?
def file_get_contents(filename):
return open(filename).read()
Was passiert mit Dateideskriptor in beiden Lösungen?
von PEP 343: http://www.python.org/dev/peps/pep-0343 Beachten Sie, dass wir nicht garantieren, dass die finally-Klausel sofort ausgeführt wird, nachdem das Generatorobjekt unbenutzt wird, obwohl dies der Fall ist wie es in CPython funktioniert. Dies ähnelt dem automatischen Schließen von Dateien: Während eine referenzzählende Implementierung wie CPython ein Objekt entlarvt, sobald der letzte Verweis auf es aufgehoben wird, geben Implementierungen, die andere GC-Algorithmen verwenden, nicht die gleiche Garantie. Dies gilt für Jython, IronPython und wahrscheinlich für Python, das auf Parrot läuft. – kriss
@kriss: Beachten Sie, dass dies der Aussage über das Ausführen von '__exit__' beim Verlassen des Körpers nicht widerspricht - es beschreibt nur, was passiert, wenn ** Sie ** den Körper nicht verlassen, indem ein Generator im Kontextmanager ausgesetzt wird, und wie Python es durch Auslösen einer Ausnahme zum Verlassen zwingen wird. – Brian