कैसे एक अस्थायी निर्देशिका बनाने के लिए और अजगर में पथ / फ़ाइल नाम प्राप्त करने के लिए
कैसे एक अस्थायी निर्देशिका बनाने के लिए और अजगर में पथ / फ़ाइल नाम प्राप्त करने के लिए
जवाबों:
मॉड्यूल mkdtemp()
से फ़ंक्शन का उपयोग करें tempfile
:
import tempfile
import shutil
dirpath = tempfile.mkdtemp()
# ... do stuff with dirpath
shutil.rmtree(dirpath)
with tempfile.TemporaryDirectory() as dirpath:
, और अस्थायी निर्देशिका संदर्भ प्रबंधक से बाहर निकलने पर स्वचालित रूप से साफ हो जाएगी। docs.python.org/3.4/library/…
अजगर 3 में, TemporaryDirectory में tempfile मॉड्यूल इस्तेमाल किया जा सकता।
यह उदाहरणों से सीधा है :
import tempfile
with tempfile.TemporaryDirectory() as tmpdirname:
print('created temporary directory', tmpdirname)
# directory and contents have been removed
यदि आप निर्देशिका को थोड़ा लंबा रखना चाहते हैं, तो ऐसा कुछ किया जा सकता है (उदाहरण से नहीं):
import tempfile
import shutil
temp_dir = tempfile.TemporaryDirectory()
print(temp_dir.name)
# use temp_dir, and when done:
shutil.rmtree(temp_dir.name)
जैसा कि @MatthiasRoelandts ने बताया, प्रलेखन यह भी कहता है कि " cleanup()
विधि को स्पष्ट रूप से विधि को कॉल करके साफ किया जा सकता है "।
एक अन्य उत्तर पर विस्तार करने के लिए, यहां एक पूर्ण रूप से उदाहरण दिया गया है जो अपवादों पर भी tmpdir को साफ कर सकता है:
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
पाइथन 3.2 और बाद में, stdlib https://docs.python.org/3/library/tempfile.html#tempfile.TemporaryDirectory में इसके लिए एक उपयोगी प्रसंग है।
अगर मुझे आपका सवाल सही लगता है, तो आप अस्थायी निर्देशिका के अंदर उत्पन्न फ़ाइलों के नाम भी जानना चाहते हैं? यदि ऐसा है, तो यह प्रयास करें:
import os
import tempfile
with tempfile.TemporaryDirectory() as tmp_dir:
# generate some random files in it
files_in_dir = os.listdir(tmp_dir)