পাইথনের সাহায্যে একটি ডিরেক্টরিতে সমস্ত ফাইল মোছা হচ্ছে


147

আমি .bakডিরেক্টরিতে এক্সটেনশন সহ সমস্ত ফাইল মুছতে চাই । পাইথনে আমি কীভাবে এটি করতে পারি?


5
@ slh2080: "সলভড" পোস্ট করা আপনি এই সাইটে যা করছেন তা নয়। আপনি যা করেন তা আসলে আপনি যে উত্তরটি ব্যবহার করেছেন তা বেছে নিন এবং এটি আপনার সমস্যার সমাধান করেছে তা বোঝাতে চেক-মার্কে ক্লিক করুন।
এস .লট

1
দুঃখিত। আমার ভুল উল্লেখ করার জন্য ধন্যবাদ। এটি হোমওয়ার্ক নয়, আমার অতিরিক্ত সময়ে অজগরটি শেখা। আমি যে উত্তরটি ব্যবহার করেছি সেটিতে ক্লিক করেছি তবে আমি ঘোস্টডগ response৪ সাড়া দেখার আগে তা ছিল।
slh2080

নোট: একটি সম্পূর্ণ ডিরেক্টরি ট্রি মুছতে shutil.rmtree(path)ব্যবহার করতে পারে
jfs

উত্তর:


270

মাধ্যমে 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


21
আপনার প্রথম উদাহরণটি লুপগুলির জন্য রিডানড্যান্ট ব্যবহার করছে। আপনি যেগুলির সাথে পাস করতে পারবেন - [os.remove (f) for f in os.listdir ("।") যদি f.endswith ("। বাক" ")] - তালিকা বোঝার জন্য বোঝানো হয়। অথবা আপনি বুঝতে পারলে 'যদি' ওষুধের জন্য লুপের জন্য - os.listdir ("।") এর জন্য: যদি f.endswith ("। বাক"): os.remove (চ)
ড্রাগনজুজো

@ slh2080 যেহেতু আপনি বলছেন যে সমস্যার সমাধান হয়েছে তাই উত্তরটিকে সঠিক উত্তর হিসাবে চিহ্নিত করবেন না কেন?
blwy10

5
Os.listdir ("।") দেখুন !!! আমি এই কোডটি ব্যবহার করেছি এবং পথ পরিবর্তন করতে ভুলে গেছি, আমার সমস্ত কোড চলে গেছে !!! পুনরুদ্ধার করতে দুটি পৃথক ইউটিলিটি চেষ্টা করেছেন তবে ভাগ্য নেই !!
লেই গুও

@ লিগুও এটি স্থির করেছেন।
yugr

26

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)

18

পাইথন ৩.৫-তে, 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"):
টিসিমর

ধন্যবাদ! এটি আমাকে
ই জিয়াং

8

আপনি একটি ফাংশন তৈরি করতে পারেন। সাবডাইরেক্টরিগুলি ট্র্যাভারিংয়ের জন্য আপনার পছন্দ অনুসারে ম্যাক্সডেপথ যুক্ত করুন।

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")


1

লিনাক্স এবং ম্যাকোজে আপনি শেলটিতে সাধারণ কমান্ড চালাতে পারেন:

subprocess.run('rm /tmp/*.bak', shell=True)

3
আমার মতে ভাল পছন্দ নয়। এটি বহনযোগ্য নয় এবং অতিরিক্ত সাবপ্রসেসের কারণে এটি সম্ভবত আরও ব্যয়বহুল। পাইথন এপিআই ব্যবহার করা আরও ভাল।
হাকন

0

আমি বুঝতে পারি যে এটি পুরানো; তবে, এখানে কেবল ওএস মডিউলটি ব্যবহার করে কীভাবে করা যায় ...

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))
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.