Ich möchte ein paar Dateien gleichzeitig ändern, wenn ich in alle schreiben kann. Ich frage mich, ob ich die mehreren offenen Anrufe irgendwie mit der with
Aussage kombinieren kann :
try:
with open('a', 'w') as a and open('b', 'w') as b:
do_something()
except IOError as e:
print 'Operation failed: %s' % e.strerror
Wenn dies nicht möglich ist, wie würde eine elegante Lösung für dieses Problem aussehen?
with
eine variable Liste von Dateien zu öffnen?ExitStack
ab Python 3.3. In früheren Versionen von Python gibt es keine einfache Möglichkeit, dies zu tun.Ersetzen Sie einfach
and
mit,
und Sie sind fertig:quelle
Zum Öffnen vieler Dateien gleichzeitig oder für lange Dateipfade kann es hilfreich sein, die Dinge über mehrere Zeilen aufzuteilen. Aus dem Python Style Guide, wie von @Sven Marnach in Kommentaren zu einer anderen Antwort vorgeschlagen:
quelle
Mit Aussagen verschachtelte Aufgaben erledigen den gleichen Job und sind meiner Meinung nach einfacher zu handhaben.
Angenommen, Sie haben inFile.txt und möchten es gleichzeitig in zwei outFiles schreiben.
BEARBEITEN:
Ich verstehe den Grund der Ablehnung nicht. Ich habe meinen Code getestet, bevor ich meine Antwort veröffentlicht habe, und er funktioniert wie gewünscht: Er schreibt in alle outFiles, genau wie es die Frage verlangt. Kein doppeltes Schreiben oder Nichtschreiben. Ich bin wirklich neugierig zu wissen, warum meine Antwort als falsch, suboptimal oder so angesehen wird.
quelle
Seit Python 3.3 können Sie die Klasse
ExitStack
aus demcontextlib
Modul verwenden,um eine beliebige Anzahl von Dateien sicher zu öffnen .
Es kann eine dynamische Anzahl kontextsensitiver Objekte verwalten. Dies bedeutet, dass es sich als besonders nützlich erweist, wenn Sie nicht wissen, wie viele Dateien Sie verarbeiten werden .
Tatsächlich verwaltet der in der Dokumentation erwähnte kanonische Anwendungsfall eine dynamische Anzahl von Dateien.
Wenn Sie an den Details interessiert sind, finden Sie hier ein allgemeines Beispiel, um zu erklären, wie es
ExitStack
funktioniert:Ausgabe:
quelle
Mit Python 2.6 wird es nicht funktionieren, wir müssen die folgende Methode verwenden, um mehrere Dateien zu öffnen:
quelle
Späte Antwort (8 Jahre), aber für jemanden, der mehrere Dateien zu einer zusammenfügen möchte , kann die folgende Funktion hilfreich sein:
quelle