Wie erstelle ich ein temporäres Verzeichnis in Python?

Lesezeit: 4 Minuten

Benutzeravatar von duhhunjonn
duhhunjonn

Wie kann ich ein temporäres Verzeichnis erstellen und seinen Pfad in Python abrufen?

Benutzeravatar von Nagev
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) anstatt temp_dir.cleanup() Ich kann ls 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 verwenden cleanup() 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

Benutzeravatar von Philipp
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

Benutzeravatar von Paul Rougieux
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

Benutzeravatar von Shoval Sadde
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)

1448790cookie-checkWie erstelle ich ein temporäres Verzeichnis in Python?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy