क्या tempपायथन 2.6 में निर्देशिका का मार्ग प्राप्त करने का एक क्रॉस-प्लेटफ़ॉर्म तरीका है ?
उदाहरण के लिए, लिनक्स के तहत जो कि /tmpXP के तहत होगा C:\Documents and settings\[user]\Application settings\Temp।
क्या tempपायथन 2.6 में निर्देशिका का मार्ग प्राप्त करने का एक क्रॉस-प्लेटफ़ॉर्म तरीका है ?
उदाहरण के लिए, लिनक्स के तहत जो कि /tmpXP के तहत होगा C:\Documents and settings\[user]\Application settings\Temp।
जवाबों:
यह टेम्पोफाइल मॉड्यूल होगा।
इसके पास अस्थायी निर्देशिका प्राप्त करने के लिए फ़ंक्शंस हैं, और इसमें अस्थायी फ़ाइलें और निर्देशिका बनाने के लिए कुछ शॉर्टकट भी हैं, या तो नामांकित या अनाम।
उदाहरण:
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
पूर्णता के लिए, यहां दस्तावेज़ीकरण के अनुसार, यह अस्थायी निर्देशिका कैसे खोजता है:
TMPDIRपर्यावरण चर द्वारा नामित निर्देशिका ।TEMPपर्यावरण चर द्वारा नामित निर्देशिका ।TMPपर्यावरण चर द्वारा नामित निर्देशिका ।Wimp$ScrapDirवातावरण चर।C:\TEMP, C:\TMP, \TEMP, और \TMPइसी क्रम में।/tmp, /var/tmpहै, और /usr/tmpइसी क्रम में।tempfile.gettempdir()हल करता है C:\users\user\AppData\Local\Temp। दुर्भाग्य से लंबा रास्ता।
यह वही करना चाहिए जो आप चाहते हैं:
print tempfile.gettempdir()
मेरे लिए मेरे विंडोज बॉक्स पर, मुझे मिलता है:
c:\temp
और मेरे लिनक्स बॉक्स पर मुझे:
/tmp
मैं उपयोग करता हूं:
from pathlib import Path
import platform
import tempfile
tempdir = Path("/tmp" if platform.system() == "Darwin" else tempfile.gettempdir())
ऐसा इसलिए है क्योंकि MacOS, यानी डार्विन, tempfile.gettempdir()और os.getenv('TMPDIR')जैसे कि एक मूल्य वापस '/var/folders/nj/269977hs0_96bttwj2gs_jhhp48z54/T'; यह वह है जिसे मैं हमेशा नहीं चाहता।
@ Nosklo की टिप्पणी और उत्तर के आधार पर सबसे सरल तरीका :
import tempfile
tmp = tempfile.mkdtemp()
लेकिन अगर आप निर्देशिकाओं के निर्माण को मैन्युअल रूप से नियंत्रित करना चाहते हैं:
import os
from tempfile import gettempdir
tmp = os.path.join(gettempdir(), '.{}'.format(hash(os.times())))
os.makedirs(tmp)
इस तरह से आप आसानी से अपने आप को साफ कर सकते हैं जब आपके साथ किया जाता है (गोपनीयता, संसाधन, सुरक्षा, जो भी हो) के साथ:
from shutil import rmtree
rmtree(tmp, ignore_errors=True)
यह Google Chrome और Linux जैसे अनुप्रयोगों के लिए समान systemdहै। वे बस अपनी उपस्थिति को "विज्ञापित" करने के लिए एक छोटी हेक्स हैश और एक ऐप-विशिष्ट उपसर्ग का उपयोग करते हैं।
tempfile.mkdtemp()इसके बजाय का उपयोग करना चाहिए
mkdtemp()आपके द्वारा सुझाए गए अधिक स्पष्ट, अधिक लचीले संस्करण है ।