Wie kann ich ein temporäres Verzeichnis erstellen und seinen Pfad in Python abrufen?
Wie erstelle ich ein temporäres Verzeichnis in Python?
duhhunjonn
Nagev
In Python3, TemporaryDirectory
von dem tempfile
Modul verwendet werden kann.
Von dem Beispiele:
import tempfile
with tempfile.TemporaryDirectory() as tmpdirname:
print('created temporary directory', tmpdirname)
# directory and contents have been removed
Um manuell zu steuern, wann das Verzeichnis entfernt wird, verwenden Sie keinen Kontextmanager, wie im folgenden Beispiel:
import tempfile
temp_dir = tempfile.TemporaryDirectory()
print(temp_dir.name)
# use temp_dir, and when done:
temp_dir.cleanup()
Die Dokumentation sagt auch:
Nach Abschluss des Kontexts oder Zerstörung des temporären Verzeichnisobjekts werden das neu erstellte temporäre Verzeichnis und alle seine Inhalte aus dem Dateisystem entfernt.
Am Ende des Programms räumt Python beispielsweise das Verzeichnis auf, falls es nicht entfernt wurde, zB durch den Kontextmanager oder den cleanup()
Methode. Pythons unittest
beklagen darf ResourceWarning: Implicitly cleaning up <TemporaryDirectory...
wenn man sich aber darauf verlässt.
-
shutdown.rmtree(temp_dir.name) ist nicht erforderlich.
– Sidcha
14. November 2019 um 7:14 Uhr
-
“Python bereinigt das Verzeichnis, wenn es nicht explizit entfernt wurde” – ich denke, dies gilt nur, wenn der Kontext-Manager-Stil (
with ...
) wird eingesetzt.– Mateen Ulhaq
4. Dezember 2021 um 5:43 Uhr
-
Wenn ich das zweite Beispiel (kein Kontextmanager) mit ausführe
sleep(5)
anstatttemp_dir.cleanup()
Ich kannls
das temporäre Verzeichnis, bevor das Programm fertig ist, und nachdem es fertig ist, ist dasselbe Verzeichnis verschwunden. Es ist wahrscheinlich am besten, einen Kontextmanager oder den zu verwendencleanup()
Methode jedoch.– Nagev
4. Dezember 2021 um 16:26 Uhr
-
das ist die beste Lösung; kein gefährlicher shutdown.rmtree erforderlich
– Matt
14. November 2022 um 0:17 Uhr
Philipp
Verwenden Sie die mkdtemp()
Funktion aus der tempfile
Modul:
import tempfile
import shutil
dirpath = tempfile.mkdtemp()
# ... do stuff with dirpath
shutil.rmtree(dirpath)
-
Wenn Sie dies in einem Test verwenden, entfernen Sie unbedingt das Verzeichnis (shutil.rmtree), da es nach der Verwendung nicht automatisch gelöscht wird. “Der Benutzer von mkdtemp() ist dafür verantwortlich, das temporäre Verzeichnis und seinen Inhalt zu löschen, wenn es damit fertig ist.” Sehen: docs.python.org/2/library/tempfile.html#tempfile.mkdtemp
– Niels Bom
12. November 2013 um 11:42 Uhr
-
In Python3 können Sie das tun
with tempfile.TemporaryDirectory() as dirpath:
und das temporäre Verzeichnis wird beim Beenden des Kontextmanagers automatisch bereinigt. docs.python.org/3.4/library/…– Symmetrisch
4. Februar 2016 um 23:11 Uhr
Um eine weitere Antwort zu erweitern, ist hier ein ziemlich vollständiges Beispiel, das das tmpdir auch bei Ausnahmen bereinigen kann:
import contextlib
import os
import shutil
import tempfile
@contextlib.contextmanager
def cd(newdir, cleanup=lambda: True):
prevdir = os.getcwd()
os.chdir(os.path.expanduser(newdir))
try:
yield
finally:
os.chdir(prevdir)
cleanup()
@contextlib.contextmanager
def tempdir():
dirpath = tempfile.mkdtemp()
def cleanup():
shutil.rmtree(dirpath)
with cd(dirpath, cleanup):
yield dirpath
def main():
with tempdir() as dirpath:
pass # do something here
-
gute alternative zu
with tempfile.TemporaryDirectory() as tmpdir:
auf Windows, da es dieser lästige Fehler das lässt mich nicht in das temporäre Verzeichnis gehen– Rui Rodrigues
26. Januar 2021 um 13:48 Uhr
In Python 3.2 und höher gibt es dafür einen nützlichen Kontextmanager in der stdlib https://docs.python.org/3/library/tempfile.html#tempfile.TemporaryDirectory
Paul Rougieux
Die Dokumentation schlägt vor, die zu verwenden TemporaryDirectory
Kontextmanager, der ein temporäres Verzeichnis erstellt und es beim Beenden des Kontextmanagers automatisch entfernt:
import tempfile
with tempfile.TemporaryDirectory() as tmpdirname:
print('created temporary directory', tmpdirname)
# Outside the context manager, directory and contents have been removed.
Verwenden pathlib
um die Pfadmanipulation obendrein zu erleichtern tempfile
ermöglicht es, neue Pfade mit dem zu erstellen /
Pfadoperator von pathlib:
import tempfile
from pathlib import Path
with tempfile.TemporaryDirectory() as tmpdirname:
temp_dir = Path(tmpdirname)
file_name = temp_dir / "test.txt"
file_name.write_text("bla bla bla")
print(temp_dir, temp_dir.exists())
# /tmp/tmp81iox6s2 True
print(file_name, "contains", file_name.open().read())
# /tmp/tmp81iox6s2/test.txt contains bla bla bla
Außerhalb des Kontextmanagers wurden Dateien zerstört
print(temp_dir, temp_dir.exists())
# /tmp/tmp81iox6s2 False
print(file_name, file_name.exists())
# /tmp/tmp81iox6s2/test.txt False
Shoval Sadde
Wenn ich Ihre Frage richtig verstehe, möchten Sie auch die Namen der Dateien wissen, die im temporären Verzeichnis generiert werden? Wenn ja, versuchen Sie Folgendes:
import os
import tempfile
with tempfile.TemporaryDirectory() as tmp_dir:
# generate some random files in it
files_in_dir = os.listdir(tmp_dir)