एक अस्थायी निर्देशिका कैसे बनाएं और पायथन में पथ / फ़ाइल नाम प्राप्त करें


जवाबों:


210

मॉड्यूल mkdtemp()से फ़ंक्शन का उपयोग करें tempfile:

import tempfile
import shutil

dirpath = tempfile.mkdtemp()
# ... do stuff with dirpath
shutil.rmtree(dirpath)

7
यदि आप परीक्षण में इसका उपयोग करते हैं, तो निर्देशिका को हटाएं (shutil.rmtree) सुनिश्चित करें क्योंकि उपयोग के बाद यह स्वचालित रूप से हटा नहीं है। "Mkdtemp () का उपयोगकर्ता अस्थायी निर्देशिका और उसकी सामग्री को हटाने के लिए जिम्मेदार है जब उसके साथ किया जाता है।" देखें: docs.python.org/2/library/tempfile.html#tempfile.mkdtemp
नील्स बॉम

97
Python3 में, आप कर सकते हैं with tempfile.TemporaryDirectory() as dirpath:, और अस्थायी निर्देशिका संदर्भ प्रबंधक से बाहर निकलने पर स्वचालित रूप से साफ हो जाएगी। docs.python.org/3.4/library/…
सममित

41

अजगर 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()विधि को स्पष्ट रूप से विधि को कॉल करके साफ किया जा सकता है "।


2
shutil.rmtree (temp_dir.name) आवश्यक नहीं है।
साइडका

37

एक अन्य उत्तर पर विस्तार करने के लिए, यहां एक पूर्ण रूप से उदाहरण दिया गया है जो अपवादों पर भी 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

अगर मुझे आपका सवाल सही लगता है, तो आप अस्थायी निर्देशिका के अंदर उत्पन्न फ़ाइलों के नाम भी जानना चाहते हैं? यदि ऐसा है, तो यह प्रयास करें:

import os
import tempfile

with tempfile.TemporaryDirectory() as tmp_dir:
    # generate some random files in it
     files_in_dir = os.listdir(tmp_dir)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.