मैं .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))