tempPython 2.6'da dizine giden yolu almanın çapraz platform yolu var mı ?
Örneğin, Linux /tmpaltında, XP altındayken C:\Documents and settings\[user]\Application settings\Temp.
tempPython 2.6'da dizine giden yolu almanın çapraz platform yolu var mı ?
Örneğin, Linux /tmpaltı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:
TMPDIROrtam değişkeni tarafından adlandırılan dizin .TEMPOrtam değişkeni tarafından adlandırılan dizin .TMPOrtam değişkeni tarafından adlandırılan dizin .Wimp$ScrapDirortam değişkeni tarafından adlandırılan dizin .C:\TEMP, C:\TMP, \TEMP, ve \TMP, bu sırayla./tmp, /var/tmpve /usr/tmpbu sırayla./var/folders/<garbage/here>yerine koyuyor /tmpçünkü böyle $TMPDIRayarlanı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 .