Cách tạo thư mục tạm thời và lấy tên đường dẫn / tệp trong python
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:
Sử dụng mkdtemp()
chức năng từ tempfile
mô-đun:
import tempfile
import shutil
dirpath = tempfile.mkdtemp()
# ... do stuff with dirpath
shutil.rmtree(dirpath)
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
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".
Để 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
Trong python 3.2 trở lên, có một bối cảnh hữu ích cho điều này trong stdlib https://docs.python.org/3/l Library / tempfile.html # tempfile.T tạmDirectory
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)