So erstellen Sie ein temporäres Verzeichnis und erhalten den Pfad / Dateinamen in Python
So erstellen Sie ein temporäres Verzeichnis und erhalten den Pfad / Dateinamen in Python
Antworten:
Verwenden Sie die mkdtemp()
Funktion aus dem tempfile
Modul:
import tempfile
import shutil
dirpath = tempfile.mkdtemp()
# ... do stuff with dirpath
shutil.rmtree(dirpath)
with tempfile.TemporaryDirectory() as dirpath:
, und das temporäre Verzeichnis wird beim Beenden des Kontextmanagers automatisch bereinigt. docs.python.org/3.4/library/…
In Python 3 kann TemporaryDirectory im tempfile- Modul verwendet werden.
Dies geht direkt aus den Beispielen hervor :
import tempfile
with tempfile.TemporaryDirectory() as tmpdirname:
print('created temporary directory', tmpdirname)
# directory and contents have been removed
Wenn Sie das Verzeichnis etwas länger behalten möchten, können Sie Folgendes tun (nicht aus dem Beispiel):
import tempfile
import shutil
temp_dir = tempfile.TemporaryDirectory()
print(temp_dir.name)
# use temp_dir, and when done:
shutil.rmtree(temp_dir.name)
Wie @MatthiasRoelandts hervorhob, heißt es in der Dokumentation auch, dass "das Verzeichnis durch Aufrufen der cleanup()
Methode explizit bereinigt werden kann".
Um eine andere Antwort zu erweitern, hier ein ziemlich vollständiges Beispiel, das das tmpdir auch in 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
In Python 3.2 und höher gibt es einen nützlichen Kontextmanager dafür in der stdlib https://docs.python.org/3/library/tempfile.html#tempfile.TemporaryDirectory
Wenn ich Ihre Frage richtig verstehe, möchten Sie auch die Namen der Dateien kennen, die im temporären Verzeichnis generiert wurden? 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)