मैं .bakएक निर्देशिका में एक्सटेंशन के साथ सभी फ़ाइलों को हटाना चाहता हूं । मैं पायथन में ऐसा कैसे कर सकता हूं?
shutil.rmtree(path)इस्तेमाल किया जा सकता है ।
मैं .bakएक निर्देशिका में एक्सटेंशन के साथ सभी फ़ाइलों को हटाना चाहता हूं । मैं पायथन में ऐसा कैसे कर सकता हूं?
shutil.rmtree(path)इस्तेमाल किया जा सकता है ।
जवाबों:
वाया os.listdirऔर os.remove:
import os
filelist = [ f for f in os.listdir(mydir) if f.endswith(".bak") ]
for f in filelist:
os.remove(os.path.join(mydir, f))
या के माध्यम से glob.glob:
import glob, os, os.path
filelist = glob.glob(os.path.join(mydir, "*.bak"))
for f in filelist:
os.remove(f)
सही निर्देशिका में होना सुनिश्चित करें, अंततः उपयोग करना os.chdir।
os.chdirनिर्देशिका बदलने के लिए उपयोग करें । glob.globफ़ाइल नामों की एक सूची बनाने के लिए उपयोग करें जो इसे '.bak' पर समाप्त करते हैं। सूची के तत्व सिर्फ तार हैं।
तब आप os.unlinkफ़ाइलों को हटाने के लिए उपयोग कर सकते हैं । (PS os.unlinkऔर os.removeसमान फ़ंक्शन के लिए समानार्थक शब्द हैं।)
#!/usr/bin/env python
import glob
import os
directory='/path/to/dir'
os.chdir(directory)
files=glob.glob('*.bak')
for filename in files:
os.unlink(filename)
पायथन 3.5 में, os.scandirबेहतर है यदि आपको फ़ाइल विशेषताओं या प्रकार की जांच करने की आवश्यकता है - os.DirEntryफ़ंक्शन द्वारा लौटाए गए ऑब्जेक्ट के गुणों के लिए देखें ।
import os
for file in os.scandir(path):
if file.name.endswith(".bak"):
os.unlink(file.path)
यह भी निर्देशिका बदलने की आवश्यकता नहीं है क्योंकि प्रत्येक DirEntryपहले से ही फ़ाइल में पूर्ण पथ शामिल है।
if file.name.endswith(".bak"):
आप एक फंक्शन बना सकते हैं। सबडायरेक्ट्रीज़ को ट्रैवर्स करने के लिए जैसा आप चाहें, मैक्सडेप जोड़ें।
def findNremove(path,pattern,maxdepth=1):
cpath=path.count(os.sep)
for r,d,f in os.walk(path):
if r.count(os.sep) - cpath <maxdepth:
for files in f:
if files.endswith(pattern):
try:
print "Removing %s" % (os.path.join(r,files))
#os.remove(os.path.join(r,files))
except Exception,e:
print e
else:
print "%s removed" % (os.path.join(r,files))
path=os.path.join("/home","dir1","dir2")
findNremove(path,".bak")
पहले उन्हें ग्लोब करें, फिर अनलिंक करें ।
Linux और macOS पर आप सरल कमांड को शेल में चला सकते हैं:
subprocess.run('rm /tmp/*.bak', shell=True)
मुझे एहसास है कि यह पुराना है; हालांकि, यहाँ कैसे सिर्फ ओएस मॉड्यूल का उपयोग कर ऐसा करना होगा ...
def purgedir(parent):
for root, dirs, files in os.walk(parent):
for item in files:
# Delete subordinate files
filespec = os.path.join(root, item)
if filespec.endswith('.bak'):
os.unlink(filespec)
for item in dirs:
# Recursively perform this operation for subordinate directories
purgedir(os.path.join(root, item))