আমি .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ফাইল নামগুলির একটি তালিকা তৈরি করতে ব্যবহার করুন যা এটি '.বাক' শেষ করে। তালিকার উপাদানগুলি কেবল স্ট্রিং।
তারপরে আপনি 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)
পাইথন ৩.৫-তে, 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")
প্রথমে সেগুলি গ্লোব করুন, তারপরে লিঙ্কমুক্ত করুন ।
লিনাক্স এবং ম্যাকোজে আপনি শেলটিতে সাধারণ কমান্ড চালাতে পারেন:
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))