Có cách nào để đưa đường dẫn đến thư mục temp
trong Python 2.6 không?Cách đa nền tảng để nhận thư mục tạm thời bằng Python
Ví dụ: dưới Linux có thể là /tmp
, trong khi dưới XP C:\Documents and settings\[user]\Application settings\Temp
.
Có cách nào để đưa đường dẫn đến thư mục temp
trong Python 2.6 không?Cách đa nền tảng để nhận thư mục tạm thời bằng Python
Ví dụ: dưới Linux có thể là /tmp
, trong khi dưới XP C:\Documents and settings\[user]\Application settings\Temp
.
Đó sẽ là mô-đun tempfile.
Có chức năng nhận thư mục tạm thời và cũng có một số phím tắt để tạo tệp và thư mục tạm thời trong thư mục đó, có tên hoặc chưa đặt tên.
Ví dụ:
import tempfile
print tempfile.gettempdir() # prints the current temporary directory
f = tempfile.TemporaryFile()
f.write('something on temporaryfile')
f.seek(0) # return to beginning of file
print f.read() # reads data back from the file
f.close() # temporary file is automatically deleted here
Để hoàn chỉnh, dưới đây là cách nó tìm kiếm các thư mục tạm thời, theo các tài liệu:
TMPDIR
môi trường.TEMP
.TMP
.Wimp$ScrapDir
môi trường.C:\TEMP
, C:\TMP
, \TEMP
, và \TMP
, theo thứ tự đó./tmp
, /var/tmp
và /usr/tmp
, theo thứ tự đó.Đối với tôi, OSX đang đưa nó vào '/var/folders/
này nên làm những gì bạn muốn:
print tempfile.gettempdir()
Đối với tôi vào hộp Windows của tôi, tôi nhận được:
c:\temp
và trên hộp Linux của tôi, tôi nhận được:
/tmp
Lấy một chút quan trọng từ @ nosklo's answer và thêm một nửa riêng tư sandbox dir:
import os
from tempfile import gettempdir
tmp = os.path.join(gettempdir(), '.{}'.format(hash(os.times())))
os.makedirs(tmp)
Bằng cách đó bạn có thể dễ dàng làm sạch sau khi chính mình khi bạn đang thực hiện (đối với sự riêng tư, tài nguyên, an ninh, bất cứ điều gì) với:
from shutil import rmtree
rmtree(tmp, ignore_errors=True)
này tương tự như những gì các ứng dụng như Google Chrome và Linux systemd
hoạt động. Họ chỉ sử dụng hàm băm hex ngắn hơn và tiền tố ứng dụng cụ thể để "quảng cáo" sự hiện diện của chúng.
tôi sử dụng:
import platform
import tempfile
tempdir = '/tmp' if platform.system() == 'Darwin' else tempfile.gettempdir()
Điều này là do trên hệ điều hành MacOS, ví dụ: Darwin, tempfile.gettempdir()
và os.getenv('TMPDIR')
trả về một giá trị như '/var/folders/nj/269977hs0_96bttwj2gs_jhhp48z54/T'
; đó là điều tôi không muốn!
Xem mô-đun tempfile tại http://docs.python.org/library/tempfile.html. –
không phải là một pythonist, nhưng bạn nên sử dụng [these] (http://docs.python.org/library/tempfile.html#tempfile.mkdtemp) phương pháp này để tạo tệp/thư mục tạm thời – skrat