Cách tạo thư mục tạm thời và lấy tên đường dẫn / tệp trong Python


Câu trả lời:


210

Sử dụng mkdtemp()chức năng từ tempfilemô-đun:

import tempfile
import shutil

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

7
Nếu bạn sử dụng điều này trong một bài kiểm tra, hãy chắc chắn xóa (shutil.rmtree) thư mục vì nó không tự động bị xóa sau khi sử dụng. "Người dùng của mkdtemp () chịu trách nhiệm xóa thư mục tạm thời và nội dung của nó khi thực hiện với nó." Xem: docs.python.org/2/l Library / tempfile.html
Niels Bom

97
Trong python3, bạn có thể làm with tempfile.TemporaryDirectory() as dirpath:và thư mục tạm thời sẽ tự động dọn sạch khi thoát khỏi trình quản lý bối cảnh. docs.python.org/3.4/l Library / trộm
xứng

41

Trong Python 3, có thể sử dụng tạm thời trong mô-đun tempfile .

Đây là trực tiếp từ các ví dụ :

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

Nếu bạn muốn giữ thư mục lâu hơn một chút, thì có thể làm điều gì đó như thế này (không phải từ ví dụ):

import tempfile
import shutil

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

Như @MatthiasRoelandts đã chỉ ra, tài liệu cũng nói rằng "thư mục có thể được dọn sạch rõ ràng bằng cách gọi cleanup()phương thức".


2
shutil.rmtree (temp_dir.name) là không cần thiết.
sidcha

37

Để mở rộng câu trả lời khác, đây là một ví dụ khá đầy đủ có thể dọn sạch tmpdir ngay cả trong các trường hợp ngoại lệ:

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

Nếu tôi nhận được câu hỏi của bạn một cách chính xác, bạn cũng muốn biết tên của các tệp được tạo trong thư mục tạm thời? Nếu vậy, hãy thử điều này:

import os
import tempfile

with tempfile.TemporaryDirectory() as tmp_dir:
    # generate some random files in it
     files_in_dir = os.listdir(tmp_dir)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.