के साथ निर्देशिका में सभी फ़ाइलों को हटाने से मैं निर्देशिका में .bak
एक्सटेंशन के साथ सभी फ़ाइलों को हटाना चाहता हूं। मैं पाइथन में ऐसा कैसे कर सकता हूं?पाइथन
पाइथन
उत्तर
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
का उपयोग कर, सही निर्देशिका में होना करने के लिए सुनिश्चित करें।
आपका पहला उदाहरण लूप के लिए अनावश्यक उपयोग कर रहा है। Oslistdir ("।") में f के लिए आप [os.remove (f) के साथ पास कर सकते हैं यदि f.endswith ("। Bak")] - सूची समझ के रूप में उपयोग किया जाना है। या आप os.listdir ("।") में f के लिए 'if' को समझने के लिए 'if' स्थानांतरित कर सकते हैं - f.endswith ("। Bak"): os.remove (f) – dragonjujo
@ slh2080 चूंकि आप कहते हैं कि समस्या हल हो गई है, तो उत्तर को सही उत्तर के रूप में क्यों चिह्नित न करें? – blwy10
@dragonjujo, हाँ मुझे पता है, लेकिन मैंने सोचा कि यह इस तरह से स्पष्ट होगा .. – miku
निर्देशिका बदलने के लिए os.chdir
का उपयोग करें। फ़ाइल नामों की एक सूची उत्पन्न करने के लिए glob.glob
का उपयोग करें जो इसे '.bak' समाप्त करता है। सूची के तत्व सिर्फ तार हैं।
फिर आप फ़ाइलों को हटाने के लिए os.unlink
का उपयोग कर सकते हैं। (पी एस। 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)
आप एक समारोह बना सकते हैं। उपनिर्देशिकाओं को ट्रैवर्स करने के लिए आपको पसंद करते हुए maxdepth जोड़ें। ऑब्जेक्ट के गुणों कि समारोह द्वारा लौटाई गई के लिए os.DirEntry
देखते हैं - आप फ़ाइल विशेषताओं या प्रकार के लिए जांच करने की आवश्यकता है, तो
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")
अजगर 3.5 में, os.scandir
बेहतर है।
import os
for file in os.scandir(path):
if file.name.endswith(".bak"):
os.unlink(file.path)
यह भी प्रत्येक DirEntry
के बाद से निर्देशिका को बदलने की आवश्यकता नहीं है पहले से ही फाइल करने के लिए पूरा पथ भी शामिल है।
आप एक कोलन खो रहे हैं, लूप के अंदर पहली पंक्ति 'if.name.endswith ("। Bak") होनी चाहिए: ' – TSeymour
धन्यवाद!वह मुझे वास्तव में उन्हें चलाने के बिना कोड लिखने के लिए सिखाएगा –
Linux और MacOS पर आप खोल करने के लिए सरल आदेश चला सकते हैं:
subprocess.run('rm /tmp/*.bak', shell=True)
मेरी राय में कोई अच्छा विकल्प नहीं है। यह पोर्टेबल नहीं है और अतिरिक्त उपप्रवाह के कारण यह शायद अधिक महंगा है। पायथन एपीआई का उपयोग करने के लिए बेहतर है। – Haakon
@ slh2080: पोस्ट कर रहा है "हल" नहीं है क्या आप इस साइट पर है। आप जो करते हैं वह वह जवाब चुनते हैं जिसका आपने वास्तव में उपयोग किया था और यह इंगित करने के लिए चेक-मार्क पर क्लिक करें कि यह आपकी समस्या का समाधान करता है। –
क्षमा करें। मेरी गलती को इंगित करने के लिए धन्यवाद। यह होमवर्क नहीं है, बस मेरे खाली समय में पाइथन सीख रहा है। मैंने उस उत्तर पर क्लिक किया जिसका मैंने उपयोग किया था, लेकिन इससे पहले कि मैंने ghostdog74 प्रतिक्रिया देखी थी। – slh2080
नोट: एक संपूर्ण निर्देशिका पेड़ को हटाने के लिए ['shutil.rmtree (पथ) 'का उपयोग किया जा सकता है] (https://docs.python.org/3/library/shutil.html#shutil.rmtree)। – jfs