Cara membuat direktori sementara dan mendapatkan path / nama file dengan Python


Jawaban:


210

Gunakan mkdtemp()fungsi dari tempfilemodul:

import tempfile
import shutil

dirpath = tempfile.mkdtemp()
# ... do stuff with dirpath
shutil.rmtree(dirpath)

7
Jika Anda menggunakan ini dalam tes pastikan untuk menghapus (shutil.rmtree) direktori karena itu tidak dihapus secara otomatis setelah digunakan. "Pengguna mkdtemp () bertanggung jawab untuk menghapus direktori sementara dan isinya ketika selesai dengan itu." Lihat: docs.python.org/2/library/tempfile.html#tempfile.mkdtemp
Niels Bom

97
Di python3, Anda dapat melakukannya with tempfile.TemporaryDirectory() as dirpath:, dan direktori sementara akan secara otomatis dibersihkan setelah keluar dari manajer konteks. docs.python.org/3.4/library/…
Symmetric

41

Dalam Python 3, TemporaryDirectory dalam modul tempfile dapat digunakan.

Ini langsung dari contoh :

import tempfile
with tempfile.TemporaryDirectory() as tmpdirname:
     print('created temporary directory', tmpdirname)
# directory and contents have been removed

Jika Anda ingin menyimpan direktori sedikit lebih lama, maka hal seperti ini bisa dilakukan (bukan dari contoh):

import tempfile
import shutil

temp_dir = tempfile.TemporaryDirectory()
print(temp_dir.name)
# use temp_dir, and when done:
shutil.rmtree(temp_dir.name)

Seperti @MatthiasRoelandts tunjukkan, dokumentasi juga mengatakan bahwa "direktori dapat dibersihkan secara eksplisit dengan memanggil cleanup()metode".


2
shutil.rmtree (temp_dir.name) tidak diperlukan.
sidcha

37

Untuk memperluas jawaban lain, berikut adalah contoh yang cukup lengkap yang dapat membersihkan tmpdir bahkan pada pengecualian:

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


3

Jika saya mendapatkan pertanyaan Anda dengan benar, Anda juga ingin tahu nama-nama file yang dihasilkan di dalam direktori sementara? Jika demikian, coba ini:

import os
import tempfile

with tempfile.TemporaryDirectory() as tmp_dir:
    # generate some random files in it
     files_in_dir = os.listdir(tmp_dir)
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.