temp
Python 2.6'da dizine giden yolu almanın çapraz platform yolu var mı ?
Örneğin, Linux /tmp
altında, XP altındayken C:\Documents and settings\[user]\Application settings\Temp
.
temp
Python 2.6'da dizine giden yolu almanın çapraz platform yolu var mı ?
Örneğin, Linux /tmp
altında, XP altındayken C:\Documents and settings\[user]\Application settings\Temp
.
Yanıtlar:
Bu geçici dosya modülü olurdu .
Geçici dizini almak için işlevleri vardır ve ayrıca adlandırılmış veya adlandırılmamış geçici dosyalar ve dizinler oluşturmak için bazı kısayollara sahiptir.
Misal:
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
Tamlık için, belgelere göre geçici dizini nasıl aradığı aşağıda açıklanmıştır:
TMPDIR
Ortam değişkeni tarafından adlandırılan dizin .TEMP
Ortam değişkeni tarafından adlandırılan dizin .TMP
Ortam değişkeni tarafından adlandırılan dizin .Wimp$ScrapDir
ortam değişkeni tarafından adlandırılan dizin .C:\TEMP
, C:\TMP
, \TEMP
, ve \TMP
, bu sırayla./tmp
, /var/tmp
ve /usr/tmp
bu sırayla./var/folders/<garbage/here>
yerine koyuyor /tmp
çünkü böyle $TMPDIR
ayarlanıyor. Buraya bakın .
tempfile.gettempdir()
çözümlenir C:\users\user\AppData\Local\Temp
. Ne yazık ki uzun bir yol.
Bu istediğinizi yapmalıdır:
print tempfile.gettempdir()
Benim için Windows kutumda:
c:\temp
ve Linux kutumda:
/tmp
Kullanırım:
from pathlib import Path
import platform
import tempfile
tempdir = Path("/tmp" if platform.system() == "Darwin" else tempfile.gettempdir())
Bu, MacOS, yani Darwin olduğu, tempfile.gettempdir()
ve os.getenv('TMPDIR')
bu gibi bir değer iade '/var/folders/nj/269977hs0_96bttwj2gs_jhhp48z54/T'
; her zaman istemediğim bir şey.
@ Nosklo'nun yorum ve cevabına dayanan en basit yol :
import tempfile
tmp = tempfile.mkdtemp()
Ancak dizinlerin oluşturulmasını manuel olarak kontrol etmek istiyorsanız:
import os
from tempfile import gettempdir
tmp = os.path.join(gettempdir(), '.{}'.format(hash(os.times())))
os.makedirs(tmp)
Bu şekilde işiniz bittiğinde (gizlilik, kaynaklar, güvenlik, ne olursa olsun) kendiniz sonra kolayca temizleyebilirsiniz:
from shutil import rmtree
rmtree(tmp, ignore_errors=True)
Bu, Google Chrome ve Linux gibi uygulamalara benzer systemd
. Varlıklarını "tanıtmak" için yalnızca daha kısa bir onaltılık karma ve uygulamaya özel bir önek kullanırlar.
tempfile.mkdtemp()
bunun yerine kullanmalısınız
mkdtemp()
önerdiğiniz daha açık, daha esnek bir sürümüdür .