किसी फ़ोल्डर की सामग्री को कैसे हटाएं?


468

मैं पायथन में एक स्थानीय फ़ोल्डर की सामग्री को कैसे हटा सकता हूं?

वर्तमान परियोजना विंडोज के लिए है, लेकिन मैं * निक्स भी देखना चाहूंगा।


2
* निक्स के लिए ईमानदार होने के लिए मैं सिर्फ इस्तेमाल करूंगाos.system('rm -rf folder')
तिलक मैडी

जवाबों:


441
import os, shutil
folder = '/path/to/folder'
for filename in os.listdir(folder):
    file_path = os.path.join(folder, filename)
    try:
        if os.path.isfile(file_path) or os.path.islink(file_path):
            os.unlink(file_path)
        elif os.path.isdir(file_path):
            shutil.rmtree(file_path)
    except Exception as e:
        print('Failed to delete %s. Reason: %s' % (file_path, e))

4
यदि आप बहुत बड़ी निर्देशिका, और विशेष रूप से खिड़कियों पर एक नेटवर्क निर्देशिका के साथ काम कर रहे हैं, और आप उस वातावरण को नियंत्रित कर सकते हैं जिसमें यह कार्यक्रम चलता है, तो यह Py3.5 के "os.scandir (फ़ोल्डर)" ​​फ़ंक्शन का उपयोग करने के बजाय लायक हो सकता है listdir। सिंटैक्स उसके बाद काफी अलग है, लेकिन लागू करने के लिए बहुत सरल है; अगर दूसरे चाहें तो इसे पोस्ट करने में खुशी होगी।
माइकल स्कॉट कटहबर्ट

मुझे लगता है except Exception as e:कि पढ़ता है के साथ एक चेतावनी मिल रहा है W0703: Catching too general exception Exception। क्या पकड़ने के लिए एक अधिक विशिष्ट अपवाद है या मुझे इसे अनदेखा करना चाहिए?
जॉन हनी

7
@ जॉन, मेरा मानना ​​है कि आप OSError को पकड़ना चाहते हैं।
मिकबी

245

आप बस यह कर सकते हैं:

import os
import glob

files = glob.glob('/YOUR/PATH/*')
for f in files:
    os.remove(f)

आप निश्चित रूप से आप पथ में एक अन्य फिल्टर का उपयोग कर सकते हैं, उदाहरण के लिए: /YOU/PATH/*.txt एक निर्देशिका में सभी पाठ फ़ाइलों को हटाने के लिए।


12
@Blueicefield *नहीं सूची छिपी फ़ाइलें, हम भी जोड़ना चाहिए होगाglob.glob('path/.*)
Satoru

5
हालाँकि फ़ाइलों की सूची को हटाने के लिए, यह करना मेरे लिए सरल प्रतीत होता है:import sh; sh.rm(files)
रॉबिन विंसलो

2
जब import sh; sh.rm(files)भी प्रेट्रियर दिखता है, आप निर्देशिका में 1024 से अधिक फाइलें होने पर परेशानी में पड़ जाते हैं।
यूजीन

234

आप फ़ोल्डर का उपयोग कर, साथ ही इसकी सभी सामग्रियों को हटा सकते हैं shutil.rmtree:

import shutil
shutil.rmtree('/path/to/folder')
shutil.rmtree(path, ignore_errors=False, onerror=None)


एक पूरी निर्देशिका ट्री हटाएं; पथ को एक निर्देशिका की ओर इंगित करना चाहिए (लेकिन किसी निर्देशिका का प्रतीकात्मक लिंक नहीं)। अगर ign_errors सच है, तो विफल निष्कासन से उत्पन्न त्रुटियों को अनदेखा किया जाएगा; यदि गलत या छोड़ा गया है, तो ऐसी त्रुटियां ऑनरोर द्वारा निर्दिष्ट हैंडलर को कॉल करके या यदि छोड़ दिया जाता है, तो वे अपवाद को उठाते हैं।


270
यह न केवल सामग्री बल्कि फ़ोल्डर को भी हटा देगा। मुझे नहीं लगता कि यह वही है जो सवाल पूछता है।
इकेर जिमेनेज़ जूल 1'09

3
मुझे लगता है कि यह एक अच्छा जवाब है। आप केवल सामग्री और फ़ोल्डर को क्यों नहीं हटाते हैं, और फिर फ़ोल्डर को रीमेक करते हैं?
cssndrx

42
क्योंकि नई निर्देशिका और पुरानी एक समान नहीं होगी। इसलिए अगर कोई कार्यक्रम निर्देशिका में बैठा है, तो चीजों के इंतजार में, उसके नीचे से गलीचा निकाला जाएगा।
कूपर में माइक कूपर

30
बस निर्देशिका को फिर से बनाएँ rmtree। जैसेos.makedirs(dir)
इलियस कर्ट

3
@IuliusCurt नहीं, मेरे पास एक डायरेक्टरी है, जिसे मैंने राम को मुहैया कराया है, जिसे मुझे खाली करने की आवश्यकता है, और दुर्भाग्य से मैं इसे हटा नहीं सकता, फिर से बना सकता हूं:OSError: [Errno 16] Device or resource busy
अरनौद पी

80

शावके के जवाब पर विस्तार करते हुए मैंने इसे लागू किया है। यह एक फ़ोल्डर की सभी सामग्री को हटाता है लेकिन फ़ोल्डर को ही नहीं। फ़ाइलों, फ़ोल्डरों और प्रतीकात्मक लिंक के साथ लिनक्स पर परीक्षण किया जाना चाहिए, साथ ही विंडोज पर भी काम करना चाहिए।

import os
import shutil

for root, dirs, files in os.walk('/path/to/folder'):
    for f in files:
        os.unlink(os.path.join(root, f))
    for d in dirs:
        shutil.rmtree(os.path.join(root, d))

1
क्यों 'चलना' और न केवल फ़ोल्डर सामग्री की सूची?
डॉन

2
यदि आप निर्देशिकाओं को हटाना चाहते हैं तो यह सही उत्तर है। walkडायरियों बनाम फ़ाइलों को विभाजित करने के लिए उपयोग किया जाता है, जिसे अलग तरीके से संभाला जाना चाहिए। आप भी उपयोग कर सकते हैं os.listdir, लेकिन आपको यह जांचना होगा कि प्रत्येक प्रविष्टि मैन्युअल रूप से डीआईआर या फ़ाइल है या नहीं।
dk विटामिन

7
यह करीब है, लेकिन os.walk और shutil.rmtree दोनों पुनरावर्ती हैं। os.walk अनावश्यक है क्योंकि आपको केवल निर्देशिका साफ करने के लिए शीर्ष स्तर पर फ़ाइलों और निर्देशिकाओं की आवश्यकता होती है। बस यह देखने के लिए कि क्या प्रत्येक फ़ाइल या निर्देशिका है, तो os.listdir में तत्वों पर एक स्टेटमेंट का उपयोग करें। फिर क्रमशः निकालें / अनलिंक और rmtree का उपयोग करें।
मैथ्यू अल्परट

1
@MatthewAlpert नोट, हालाँकि, यह os.walkयहाँ फिर से नहीं आएगा, क्योंकि यह एक जनरेटर लौटाता है जब आप इसे आगे बढ़ाने की कोशिश करते हैं, तो केवल एक ही सबटैक्टरी में दिखता है, और जब तक आप इस लूप का अपना पहला पुनरावृत्ति कर लेते हैं, तब तक कोई उपनिर्देशिका नहीं होती है देखने के लिए छोड़ दिया। संक्षेप में, os.walkबस यहां शीर्ष-स्तरीय फ़ाइलों से शीर्ष-स्तरीय फ़ोल्डरों को अलग करने के वैकल्पिक तरीके के रूप में उपयोग किया जा रहा है; पुनरावृत्ति का उपयोग नहीं किया जा रहा है और हम इसके लिए कोई प्रदर्शन लागत नहीं देते हैं। हालांकि यह सनकी है, और मैं मानता हूं कि आपके द्वारा सुझाया गया दृष्टिकोण बेहतर है, क्योंकि यह अधिक स्पष्ट और पठनीय है।
मार्क अमेरी

47

rmtreeफ़ोल्डर का उपयोग करना और उसे फिर से बनाना काम कर सकता है, लेकिन मैं नेटवर्क ड्राइव पर फ़ोल्डर को हटाते और तुरंत पुनः बनाए जाने पर त्रुटियों में चला गया हूं।

वॉक का उपयोग करने वाला प्रस्तावित समाधान उन फ़ोल्डरों rmtreeको हटाने के लिए काम नहीं करता है जैसा कि वह फ़ोल्डर को हटाने के लिए उपयोग करता है और फिर os.unlinkउन फ़ाइलों पर उपयोग करने का प्रयास कर सकता है जो पहले उन फ़ोल्डरों में थे। यह एक त्रुटि का कारण बनता है।

पोस्ट किया गया glob समाधान गैर-खाली फ़ोल्डरों को हटाने का प्रयास करेंगे, जिससे त्रुटियां हो सकती हैं।

मेरा सुझाव है कि आप उपयोग करें:

folder_path = '/path/to/folder'
for file_object in os.listdir(folder_path):
    file_object_path = os.path.join(folder_path, file_object)
    if os.path.isfile(file_object_path) or os.path.islink(file_object_path):
        os.unlink(file_object_path)
    else:
        shutil.rmtree(file_object_path)

1
यदि आपकी निर्देशिका किसी अन्य निर्देशिका के लिए सहानुभूति है, तो आपका समाधान भी एक त्रुटि उत्पन्न करेगा।
ब्लूइसफील्ड

@Blueicefield - क्या आप एक उदाहरण प्रदान कर सकते हैं। मैंने एक सीलिंक फ़ाइल और फ़ोल्डर का उपयोग करके लिनक्स में परीक्षण किया है, और अभी तक कोई त्रुटि पैदा करने में सक्षम नहीं है।
जोजेदर्स

@jgoeders - यदि किसी निर्देशिका में कोई सिम्लिंक है, os.path.isfile()तो वापस आ जाएगी False(क्योंकि यह सिमिलिंक का अनुसरण करता है), और आप shutil.rmtree()सिमिलिंक पर कॉल करना समाप्त कर देंगे , जो उठाएंगे OSError("Cannot call rmtree on a symbolic link")
रॉकलाईट

1
@Rockallite 18-28 पर islink
kevinf

1
इसके अलावा: @kevinf सही islinkढंग से निर्देशिकाओं के लिए सहानुभूति को संभालने के लिए यहां एक जांच की आवश्यकता को इंगित करने के लिए सही है। मैंने ऐसे चेक को स्वीकृत उत्तर में जोड़ दिया है।
मार्क अमेरी

20

इस:

  • सभी प्रतीकात्मक लिंक को हटा देता है
    • मृत लिंक
    • निर्देशिकाओं के लिए लिंक
    • फ़ाइलों के लिए लिंक
  • उपनिर्देशिका निकालता है
  • मूल निर्देशिका को नहीं निकालता है

कोड:

for filename in os.listdir(dirpath):
    filepath = os.path.join(dirpath, filename)
    try:
        shutil.rmtree(filepath)
    except OSError:
        os.remove(filepath)

कई अन्य उत्तरों के रूप में, यह फ़ाइलों / निर्देशिकाओं को हटाने में सक्षम करने के लिए अनुमतियों को समायोजित करने का प्रयास नहीं करता है।


15

ऑनलाइनर के रूप में:

import os

# Python 2.7
map( os.unlink, (os.path.join( mydir,f) for f in os.listdir(mydir)) )

# Python 3+
list( map( os.unlink, (os.path.join( mydir,f) for f in os.listdir(mydir)) ) )

फ़ाइलों और निर्देशिकाओं के लिए एक अधिक मजबूत समाधान लेखांकन होगा (2.7):

def rm(f):
    if os.path.isdir(f): return os.rmdir(f)
    if os.path.isfile(f): return os.unlink(f)
    raise TypeError, 'must be either file or directory'

map( rm, (os.path.join( mydir,f) for f in os.listdir(mydir)) )

1
जनरेटर का उपयोग करने वाले बड़े कार्यों के लिए आंशिक रूप से अधिक कुशल हो सकता हैmap( os.unlink, (os.path.join( mydir,f) for f in os.listdir(mydir)) )
user25064

वास्तव में इस का उपयोग करने की कोशिश कर रहा है, नक्शे की वस्तु को महसूस किया जाना चाहिए ताकि सूची (या ऐसा कुछ जो पुनरावृत्त होगा) पर कॉल करने की आवश्यकता हैlist(map(os.unlink, (os.path.join( mydir,f) for f in os.listdir(mydir))))
user25064

पहले एक को उत्तर में शामिल किया गया, दूसरा मुझे कोई मतलब नहीं है। आप एक समारोह में iterable को मैप करना चाहिए क्यों? मैप वह करता है।
fmonegaglia

1
Python3 में, आप रैप करने के लिए है mapमें list वास्तव में पुनरावृति करने के लिए। देखें http://stackoverflow.com/questions/1303347/getting-a-map-to-return-a-list-in-python-3-x
paulwasit

यह निश्चित रूप से काम नहीं करेगा अगर 'mydir' में कम से कम एक फ़ोल्डर है, जैसा कि केवल फाइलों के लिए अनलिंक काम करता है ...
kupsef

14

नोट: यदि किसी ने मेरे उत्तर को अस्वीकार कर दिया है, तो मुझे यहाँ कुछ समझाना होगा।

  1. सभी को छोटे 'एन' सरल उत्तर पसंद हैं। हालांकि, कभी-कभी वास्तविकता इतनी सरल नहीं होती है।
  2. मेरे जवाब पर वापस। मुझे पता है कि shutil.rmtree()एक निर्देशिका पेड़ को हटाने के लिए इस्तेमाल किया जा सकता है। मैंने इसे अपनी परियोजनाओं में कई बार उपयोग किया है। लेकिन आपको महसूस करना चाहिए कि निर्देशिका को भी हटा दिया जाएगाshutil.rmtree() । हालांकि यह कुछ के लिए स्वीकार्य हो सकता है, यह एक फ़ोल्डर की सामग्री को हटाने के लिए एक वैध जवाब नहीं है (साइड इफेक्ट्स के बिना)
  3. मैं आपको साइड इफेक्ट्स का एक उदाहरण दिखाऊंगा। मान लीजिए कि आपके पास स्वनिर्धारित स्वामी और मोड बिट्स के साथ एक निर्देशिका है , जहां बहुत सारी सामग्रियां हैं। फिर आप इसे हटा दें shutil.rmtree()और इसके साथ पुनर्निर्माण करें os.mkdir()। और आपको इसके बजाय डिफ़ॉल्ट (विरासत में मिला) के मालिक और मोड बिट्स के साथ एक खाली निर्देशिका मिलेगी । हालांकि आपको सामग्री और यहां तक ​​कि निर्देशिका को हटाने का विशेषाधिकार प्राप्त हो सकता है, आप निर्देशिका पर मूल स्वामी और मोड बिट्स को वापस सेट करने में सक्षम नहीं हो सकते हैं (जैसे कि आप एक सुपरयूज़र नहीं हैं)।
  4. अंत में, धैर्य रखें और कोड पढ़ें । यह लंबा और बदसूरत (दृष्टि में) है, लेकिन विश्वसनीय और कुशल (उपयोग में) साबित होता है।

यहाँ एक लंबा और बदसूरत, लेकिन विश्वसनीय और कुशल समाधान है।

यह कुछ समस्याओं का समाधान करता है जो अन्य उत्तरदाताओं द्वारा संबोधित नहीं की जाती हैं:

  • यह प्रतीकात्मक लिंक को सही ढंग से संभालना शामिल है, जिसमें shutil.rmtree()एक प्रतीकात्मक लिंक पर कॉल नहीं करना शामिल है (जो os.path.isdir()कि एक निर्देशिका से लिंक होने पर परीक्षा पास करेगा , यहां तक ​​कि os.walk()प्रतीकात्मक लिंक वाली निर्देशिका भी शामिल है)।
  • यह रीड-ओनली फाइल्स को अच्छी तरह से हैंडल करता है।

यहाँ कोड (केवल उपयोगी कार्य है clear_dir()):

import os
import stat
import shutil


# http://stackoverflow.com/questions/1889597/deleting-directory-in-python
def _remove_readonly(fn, path_, excinfo):
    # Handle read-only files and directories
    if fn is os.rmdir:
        os.chmod(path_, stat.S_IWRITE)
        os.rmdir(path_)
    elif fn is os.remove:
        os.lchmod(path_, stat.S_IWRITE)
        os.remove(path_)


def force_remove_file_or_symlink(path_):
    try:
        os.remove(path_)
    except OSError:
        os.lchmod(path_, stat.S_IWRITE)
        os.remove(path_)


# Code from shutil.rmtree()
def is_regular_dir(path_):
    try:
        mode = os.lstat(path_).st_mode
    except os.error:
        mode = 0
    return stat.S_ISDIR(mode)


def clear_dir(path_):
    if is_regular_dir(path_):
        # Given path is a directory, clear its content
        for name in os.listdir(path_):
            fullpath = os.path.join(path_, name)
            if is_regular_dir(fullpath):
                shutil.rmtree(fullpath, onerror=_remove_readonly)
            else:
                force_remove_file_or_symlink(fullpath)
    else:
        # Given path is a file or a symlink.
        # Raise an exception here to avoid accidentally clearing the content
        # of a symbolic linked directory.
        raise OSError("Cannot call clear_dir() on a symbolic link")

मुझे समझ नहीं आ रहा है कि फ़ाइल मोड को बदलने के संदर्भ में क्या अर्थ है। पर मेरी मैक, os.remove, के विपरीतrm उपयोगिता, जब तक आप उनके स्वामी के रूप में केवल पढ़ने के लिए फ़ाइलों को हटाने के लिए खुश है। इस बीच, यदि यह एक ऐसी फाइल है जो आपके पास नहीं है तो आपके पास केवल आसानी से पहुंच है, तो आप इसे हटा नहीं सकते हैं या इसकी अनुमति नहीं बदल सकते हैं । मैं किसी भी प्रणाली पर ऐसी कोई स्थिति नहीं जानता जहाँ आप os.removeअपनी अनुमतियों को बदलने में सक्षम होने के साथ आसानी से फ़ाइल को हटाने में असमर्थ हों । इसके अलावा, आप उपयोग करते हैं lchmod, जो मेरे मैक पर मौजूद नहीं है, न ही विंडोज पर इसके डॉक्स के अनुसार। क्या कोड इस कोड के लिए है ?!
मार्क अमीरी

14

मुझे आश्चर्य है कि किसी ने भी pathlibइस काम को करने का ज़िक्र नहीं किया ।

यदि आप केवल निर्देशिका में फ़ाइलों को निकालना चाहते हैं तो यह ऑनलाइनर हो सकता है

from pathlib import Path

[f.unlink() for f in Path("/path/to/folder").glob("*") if f.is_file()] 

पुनरावर्ती निर्देशिकाओं को हटाने के लिए आप कुछ इस तरह लिख सकते हैं:

from pathlib import Path
from shutil import rmtree

for path in Path("/path/to/folder").glob("**/*"):
    if path.is_file():
        path.unlink()
    elif path.is_dir():
        rmtree(path)

1
.iterdir()इसके बजाय .glob(...)भी काम करना चाहिए।
एस किर्बी

11
import os
import shutil

# Gather directory contents
contents = [os.path.join(target_dir, i) for i in os.listdir(target_dir)]

# Iterate and remove each item in the appropriate manner
[os.remove(i) if os.path.isfile(i) or os.path.islink(i) else shutil.rmtree(i) for i in contents]

पहले की टिप्पणी में पायथन 3.5+ में os.scandir का उपयोग करने का भी उल्लेख है। उदाहरण के लिए:

import os
import shutil

with os.scandir(target_dir) as entries:
    for entry in entries:
        if entry.is_file() or entry.is_symlink():
            os.remove(entry.path)
        elif entry.is_dir():
            shutil.rmtree(entry.path)

1
os.path.isdir()एक नियमित निर्देशिका और एक प्रतीकात्मक लिंक के बीच अंतर करने का एक वैध तरीका नहीं है। shutil.rmtree()प्रतीकात्मक लिंक पर कॉल करना OSErrorअपवाद को बढ़ाएगा ।
रॉकलाईट

@Rockallite धन्यवाद। आप सही हे। मैंने उदाहरण को अद्यतन किया।
जैकब वान

8

आप इसके लिए बेहतर उपयोग कर सकते हैं os.walk()

os.listdir()निर्देशिकाओं से फ़ाइलों को अलग नहीं करता है और आप जल्दी से इन को अनलिंक करने की कोशिश में परेशानी में पड़ जाएंगे। यहाँos.walk() किसी निर्देशिका को पुनरावर्ती रूप से निकालने के लिए , और इसे आपकी परिस्थितियों के अनुकूल कैसे बनाया जाए, इसका उपयोग करने का एक अच्छा उदाहरण है।


6

मैं इस तरह से समस्या का समाधान करता था:

import shutil
import os

shutil.rmtree(dirpath)
os.mkdir(dirpath)

7
यह मौलिक रूप से अलग-अलग शब्दार्थ है जो सवाल पूछता है और इसे एक वैध उत्तर के रूप में नहीं माना जाना चाहिए।
फतहोकू

1
सम्मान के साथ मुझे लगता है कि "स्थानीय फ़ोल्डर की सामग्री हटाएं" फ़ोल्डर को हटाने में शामिल नहीं है। इस जवाब के रूप में एक ही समस्या , सिवाय इसके कि बहुत से अपवोट मिले!
फतहोकू

3
यह इस सवाल का जवाब देने जैसा है कि "पायथन में नंबर 1 पर मेरे पास एक फ़ंक्शन कैसे है?" def के साथ return_a_one (): launch_some_nukes () वापसी 1
fatuhoku

2
बेशक शब्दार्थ अलग है: लेकिन आप इसे समस्या को देखने का एक और तरीका मान सकते हैं। यह समाधान पूरी तरह से मान्य है क्योंकि यह समस्या को हल करता है। आपके 'launch_some_nukes' उदाहरण के लिए एक अंतर है: 1. समाधान स्वीकृत एक की तुलना में छोटा और आसान है और आपके द्वारा उद्धृत उत्तर के विरोध में यह मान्य है। 2. इस मामले में 'launch_some_nukes' समतुल्य एक फ़ोल्डर को हटा रहा है और पुनः बना रहा है। पुराने और नए फ़ोल्डर के बीच अंतर केवल
इनोड

2
यह बल्कि गगनचुंबी इमारत को ध्वस्त कर रहा है और एक ही आकार का पुनर्निर्माण कर रहा है;)
प्रोफैस 85

5

अभी तक एक और समाधान:

import sh
sh.rm(sh.glob('/path/to/folder/*'))

1
ध्यान दें कि shमानक पुस्तकालय का हिस्सा नहीं है और आपको इसे इस्तेमाल करने से पहले PyPI से इंस्टॉल करने की आवश्यकता है। इसके अलावा, चूंकि यह वास्तव rmमें एक उपप्रकार में आक्रमण करता है, यह विंडोज पर काम नहीं करेगा जहां rmमौजूद नहीं है। यदि फ़ोल्डर में कोई उपनिर्देशिका है, तो यह एक अपवाद भी बढ़ाएगा।
मार्क अमेरी

5

मुझे पता है कि यह एक पुराना धागा है लेकिन मुझे अजगर की आधिकारिक साइट से कुछ दिलचस्प मिला है। बस एक निर्देशिका में सभी सामग्री को हटाने के लिए एक और विचार साझा करने के लिए। क्योंकि मुझे shutil.rmtree () का उपयोग करते समय प्राधिकरण की कुछ समस्याएं हैं और मैं निर्देशिका को हटाकर इसे फिर से बनाना नहीं चाहता। मूल पता http://docs.python.org/2/library/os.html#os.walk है । आशा है कि किसी की मदद कर सकता है।

def emptydir(top):
    if(top == '/' or top == "\\"): return
    else:
        for root, dirs, files in os.walk(top, topdown=False):
            for name in files:
                os.remove(os.path.join(root, name))
            for name in dirs:
                os.rmdir(os.path.join(root, name))

4

निर्देशिका के अंदर सभी फ़ाइलों को हटाने के लिए और साथ ही इसके उप-निर्देशिकाओं को, फ़ोल्डर्स को हटाने के बिना, बस यह करें:

import os
mypath = "my_folder" #Enter your path here
for root, dirs, files in os.walk(mypath):
    for file in files:
        os.remove(os.path.join(root, file))

3

यदि आप एक * निक्स प्रणाली का उपयोग कर रहे हैं, तो सिस्टम कमांड का लाभ क्यों नहीं उठाते हैं?

import os
path = 'folder/to/clean'
os.system('rm -rf %s/*' % path)

3
क्योंकि, जैसा कि प्रश्न में कहा गया है, "वर्तमान परियोजना विंडोज के लिए है"
मोनिका

3

यह करने का बहुत सहज तरीका:

import shutil, os


def remove_folder_contents(path):
    shutil.rmtree(path)
    os.makedirs(path)


remove_folder_contents('/path/to/folder')

3

खैर, मुझे लगता है कि यह कोड काम कर रहा है। यह फ़ोल्डर को नहीं हटाएगा और आप इस कोड का उपयोग विशेष एक्सटेंशन वाली फ़ाइलों को हटाने के लिए कर सकते हैं।

import os
import glob

files = glob.glob(r'path/*')
for items in files:
    os.remove(items)

3

मुझे सिंगल पेरेंट डायरेक्टरी के अंदर 3 अलग-अलग फोल्डर से फाइलें निकालनी थीं:

directory
   folderA
      file1
   folderB
      file2
   folderC
      file3

इस सरल कोड ने मेरे लिए चाल चली: (मैं यूनिक्स पर हूँ)

import os
import glob

folders = glob.glob('./path/to/parentdir/*')
for fo in folders:
  file = glob.glob(f'{fo}/*')
  for f in file:
    os.remove(f)

उम्मीद है की यह मदद करेगा।


1

मैंने बीच में rmtree makedirsजोड़कर समस्या हल की time.sleep():

if os.path.isdir(folder_location):
    shutil.rmtree(folder_location)

time.sleep(.5)

os.makedirs(folder_location, 0o777)

0

सीमित, विशिष्ट स्थिति के लिए उत्तर: मान लें कि आप सबफ़ोल्डर्स ट्री को बनाए रखते हुए फ़ाइलों को हटाना चाहते हैं, तो आप पुनरावर्ती एल्गोरिदम का उपयोग कर सकते हैं:

import os

def recursively_remove_files(f):
    if os.path.isfile(f):
        os.unlink(f)
    elif os.path.isdir(f):
        for fi in os.listdir(f):
            recursively_remove_files(os.path.join(f, fi))

recursively_remove_files(my_directory)

शायद थोड़ा ऑफ-टॉपिक, लेकिन मुझे लगता है कि कई इसे उपयोगी पाएंगे


का उपयोग करते हुए os.walkजिस तरह से में दिखाया में stackoverflow.com/a/54889532/1709587 शायद जबकि निर्देशिका संरचना बरकरार छोड़ने सभी फ़ाइलों को हटाने के एक अच्छे तरीका है।
मार्क एमी

-1

temp_dirहटाए जाने की मानें , तो एक एकल पंक्ति कमांड का उपयोग osकिया जाएगा:

_ = [os.remove(os.path.join(save_dir,i)) for i in os.listdir(temp_dir)]

नोट: यह फ़ाइलों को हटाने के लिए केवल 1-लाइनर है 'निर्देशिकाओं को नहीं हटाता है।

उम्मीद है की यह मदद करेगा। धन्यवाद।


-1

डायरेक्टरी की सामग्री को हटाने के लिए मेथड बेलो का प्रयोग करें, न कि डायरेक्टरी का:

import os
import shutil

def remove_contents(path):
    for c in os.listdir(path):
        full_path = os.path.join(path, c)
        if os.path.isfile(full_path):
            os.remove(full_path)
        else:
            shutil.rmtree(full_path)

@ फाबियोस्पेगेटी नेगेटिव
अमीर रेजादेह

धन्यवाद आमिर, मैं एक ऐसे समाधान की तलाश कर रहा हूं जो रूट डायरेक्टरी के सभी उपनिर्देशिकाओं में एक निश्चित फ़ोल्डर ढूंढता है और उस फ़ोल्डर की सामग्री को हटाता है
FabioSpaghetti

इससे पहले कि आप इस पोस्ट को स्वीकार किए गए उत्तर वर्षों में नहीं दिखाया गया था, यह कुछ भी नया नहीं जोड़ता है।
मार्क एमी

-1

एक फ़ोल्डर में सभी फ़ाइलों को हटाने / सभी फ़ाइलों को हटाने का सबसे आसान तरीका

import os
files = os.listdir(yourFilePath)
for f in files:
    os.remove(yourFilePath + f)

उपनिर्देशिकाएँ हैं, तो विफल रहता है।
मार्क एमी

-3

यह सूची और फिर हटाने के लिए ओएस मॉड्यूल का उपयोग करके चाल करना चाहिए!

import os
DIR = os.list('Folder')
for i in range(len(DIR)):
    os.remove('Folder'+chr(92)+i)

मेरे लिए काम किया, किसी भी समस्या मुझे बताएं!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.