কিভাবে একটি ফোল্ডার বিষয়বস্তু মুছবেন?


468

পাইথনের স্থানীয় ফোল্ডারের সামগ্রীগুলি কীভাবে মুছতে পারি?

বর্তমান প্রকল্পটি উইন্ডোজের জন্য, তবে আমি * নিক্সও দেখতে চাই।


2
* নিক্সের সততার জন্য আমি কেবল ব্যবহার করবos.system('rm -rf folder')
তিলক ম্যাডি

উত্তর:


441
import os, shutil
folder = '/path/to/folder'
for filename in os.listdir(folder):
    file_path = os.path.join(folder, filename)
    try:
        if os.path.isfile(file_path) or os.path.islink(file_path):
            os.unlink(file_path)
        elif os.path.isdir(file_path):
            shutil.rmtree(file_path)
    except Exception as e:
        print('Failed to delete %s. Reason: %s' % (file_path, e))

4
আপনি যদি একটি খুব বড় ডিরেক্টরি এবং উইন্ডোজের বিশেষত একটি নেটওয়ার্ক ডিরেক্টরি নিয়ে কাজ করছেন এবং আপনি যে পরিবেশটি এই প্রোগ্রামটি চালাচ্ছেন এটি নিয়ন্ত্রণ করতে পারেন, তবে পাই3.5 এর "os.scandir (ফোল্ডার)" ফাংশনটি ব্যবহারের পরিবর্তে এটি কার্যকর হতে পারে listdir। এর পরে বাক্য গঠনটি বেশ আলাদা, তবে বাস্তবায়নের পক্ষে বেশ সহজ; অন্যরা চাইলে এটি পোস্ট করে খুশি।
মাইকেল স্কট কুথবার্ট

আমি except Exception as e:পড়ার সাথে একটি পাইলট সতর্কতা পাচ্ছি W0703: Catching too general exception Exception। ধরার জন্য আরও নির্দিষ্ট কোনও ব্যতিক্রম আছে বা আমার এড়িয়ে যাওয়া উচিত?
জন হ্যানি

7
@ জোহনহানি, আমি বিশ্বাস করি আপনি ওএসআরার ধরতে চান।
মাইকেবি

245

আপনি কেবল এটি করতে পারেন:

import os
import glob

files = glob.glob('/YOUR/PATH/*')
for f in files:
    os.remove(f)

আপনি অবশ্যই আপনার পাথে অন্য ফিল্টারটি ব্যবহার করতে পারেন, উদাহরণস্বরূপ: /YOU/PATH/*.txt ডিরেক্টরিতে সমস্ত পাঠ্য ফাইল সরানোর জন্য।


12
@ ব্লুয়াসফিল্ড *লুকানো ফাইলগুলি তালিকাভুক্ত করবে না, আমাদের আরও যোগ করা উচিতglob.glob('path/.*)
স্যাটারু

5
ফাইলগুলির তালিকা মুছতে থাকলেও, এটি করা আমার কাছে সহজ বলে মনে হচ্ছে:import sh; sh.rm(files)
রবিন উইনস্লো

2
ডিরেক্টরিতে সুন্দর import sh; sh.rm(files)দেখাতে না পারলে ডিরেক্টরিতে যদি 1024 এর বেশি ফাইল থাকে তবে আপনি সমস্যায় পড়বেন।
ইউজিন

234

আপনি নিজেই ফোল্ডারটি এবং এর সমস্ত সামগ্রী মুছে ফেলতে পারেন shutil.rmtree:

import shutil
shutil.rmtree('/path/to/folder')
shutil.rmtree(path, ignore_errors=False, onerror=None)


একটি সম্পূর্ণ ডিরেক্টরি গাছ মুছুন; পাথ অবশ্যই একটি ডিরেক্টরিতে নির্দেশ করবে (তবে কোনও ডিরেক্টরিতে প্রতীকী লিঙ্ক নয়)। যদি উপেক্ষা_ত্যাগগুলি সত্য হয় তবে ব্যর্থ অপসারণগুলির ফলে প্রাপ্ত ত্রুটিগুলি উপেক্ষা করা হবে; যদি মিথ্যা বা বাদ দেওয়া হয় তবে এই জাতীয় ত্রুটিগুলি অনাররারের দ্বারা নির্দিষ্ট একটি হ্যান্ডলারকে কল করে বা যদি এটি বাদ দেওয়া হয় তবে তারা একটি ব্যতিক্রম বাড়াবে।


270
এটি কেবলমাত্র সামগ্রীগুলিই মুছবে না তবে ফোল্ডারটি নিজেই মুছে ফেলবে। আমি মনে করি না যে এটিই প্রশ্নটি করে।
ইকার জিমেনিজ

3
আমি মনে করি এটি একটি ভাল উত্তর। আপনি কেন কেবল সামগ্রী এবং ফোল্ডারটি মুছবেন না এবং ফোল্ডারটি পুনরায় তৈরি করবেন না?
cssndrx

42
কারণ নতুন ডিরেক্টরি এবং পুরানোটি এক হবে না। সুতরাং যদি কোনও প্রোগ্রাম ডিরেক্টরিতে বসে থাকে, জিনিসগুলির জন্য অপেক্ষা করে, তবে এটির কম্বলটি তার নীচে থেকে টেনে আনতে হবে।
মাইক কুপার

30
কেবল পরে ডিরেক্টরিটি পুনরায় তৈরি করুন rmtree। লাইকos.makedirs(dir)
আইলিয়াস কর্ট

3
@ ইউলিয়াস কর্ট নো, আমার একটি ডিরেক্টরি রয়েছে যা আমাকে র‌্যামে খালি করা দরকার, এবং দুর্ভাগ্যক্রমে আমি আবার মুছে ফেলতে পারি না তবে এটি পুনরায় তৈরি করতে পারি:OSError: [Errno 16] Device or resource busy
আরনাড পি

80

মাওহকের জবাব প্রসারিত করা এটাই আমি বাস্তবায়ন করেছি। এটি কোনও ফোল্ডারের সমস্ত সামগ্রী সরিয়ে দেয় তবে ফোল্ডারটি নিজেই নয়। ফাইল, ফোল্ডার এবং প্রতীকী লিঙ্কগুলির সাথে লিনাক্সে পরীক্ষিত, উইন্ডোতেও কাজ করা উচিত।

import os
import shutil

for root, dirs, files in os.walk('/path/to/folder'):
    for f in files:
        os.unlink(os.path.join(root, f))
    for d in dirs:
        shutil.rmtree(os.path.join(root, d))

1
কেন 'হাঁটাচলা' এবং কেবল ফোল্ডারের সামগ্রী তালিকাভুক্ত নয়?
ডন

2
আপনি যদি ডিরেক্টরিগুলিও মুছতে চান তবে এটি সঠিক উত্তর। walkডায়ার বনাম ফাইলগুলি বিভক্ত করতে ব্যবহৃত হয়, যা অবশ্যই অন্যভাবে পরিচালনা করা উচিত। আপনি এটি ব্যবহার করতে পারেন os.listdir, তবে আপনাকে অবশ্যই পরীক্ষা করতে হবে যে প্রতিটি এন্ট্রি ম্যানুয়ালি দির বা ফাইল রয়েছে কিনা।
ডেকমিনস

7
এটি কাছাকাছি হলেও os.walk এবং shutil.rmtree উভয়ই পুনরাবৃত্ত হয়। ওএসওয়াক অপ্রয়োজনীয় যেহেতু আপনার কেবলমাত্র ডিরেক্টরি এবং ডাইরেক্টরির ভিতরে শীর্ষ স্তরের ফাইলগুলি পরিষ্কার করতে হবে। প্রতিটি ফাইল বা ডিরেক্টরি কিনা তা দেখতে os.listdir এর উপাদানগুলিতে কেবল একটি if স্টেটমেন্ট ব্যবহার করুন। তারপরে যথাক্রমে অপসারণ / আনলিংক এবং rmtree ব্যবহার করুন।
ম্যাথু আল্পার্ট

1
@ ম্যাথিউ অ্যালবার্ট নোট, তবে, os.walkএখানে পুনরাবৃত্তি হবে না, কারণ এটি কোনও জেনারেটরকে ফেরত দেওয়ার চেষ্টা করার সময় কেবলমাত্র পুনরাবৃত্তভাবে সাব-ডাইরেক্টরিগুলিতে সন্ধান করে এবং আপনি যখন এই লুপটির প্রথম পুনরাবৃত্তিটি করেছেন তখন কোনও সাব-ডিরেক্টরি নেই দেখার জন্য বাম সংক্ষেপে, os.walkএখানে কেবল শীর্ষ-স্তরের ফাইলগুলি থেকে শীর্ষ স্তরের ফোল্ডারগুলিকে আলাদা করার বিকল্প উপায় হিসাবে ব্যবহার করা হচ্ছে; পুনরাবৃত্তি ব্যবহৃত হচ্ছে না এবং আমরা এর জন্য কোনও কার্যকারিতা ব্যয় করি না। যদিও এটি উদ্ভট, এবং আমি সম্মত হই যে আপনার প্রস্তাবিত পদ্ধতিটি আরও ভাল কারণ এটি আরও স্পষ্ট এবং পাঠযোগ্য।
মার্ক অ্যামেরি

47

rmtreeফোল্ডারটি ব্যবহার করা এবং পুনরুদ্ধার করা কাজ করতে পারে তবে নেটওয়ার্ক ড্রাইভে ফোল্ডারগুলি মুছে ফেলা এবং অবিলম্বে পুনরুদ্ধার করার সময় আমি ত্রুটিগুলিতে চলে এসেছি into

ওয়াক ব্যবহার করে প্রস্তাবিত সমাধানটি কাজ করে না কারণ এটি rmtreeফোল্ডারগুলি অপসারণ করতে ব্যবহার os.unlinkকরে এবং তারপরে এই ফোল্ডারে থাকা ফাইলগুলিতে ব্যবহারের চেষ্টা করতে পারে । এটি একটি ত্রুটি ঘটায়।

পোস্ট করা globসমাধান ত্রুটি সৃষ্টি করে, খালি-খালি ফোল্ডারগুলি মোছার চেষ্টা করবে।

আমি আপনাকে ব্যবহার করার পরামর্শ দিচ্ছি:

folder_path = '/path/to/folder'
for file_object in os.listdir(folder_path):
    file_object_path = os.path.join(folder_path, file_object)
    if os.path.isfile(file_object_path) or os.path.islink(file_object_path):
        os.unlink(file_object_path)
    else:
        shutil.rmtree(file_object_path)

1
অন্য ডিরেক্টরিতে যদি একটি সিমলিংক থাকে তবে আপনার সমাধানটিও একটি ত্রুটি বাড়িয়ে তুলবে।
ব্লুইসফিল্ড

@ ব্লুইসফিল্ড - আপনি একটি উদাহরণ দিতে পারেন? আমি লিনাক্সে একটি সংযুক্ত ফাইল এবং ফোল্ডার ব্যবহার করে পরীক্ষা করেছি এবং এখনও ত্রুটির কারণ হতে পারি নি।
jgoeders

@ জগোএডারস - যদি কোনও ডিরেক্টরিতে একটি সিমলিংক থাকে তবে os.path.isfile()ফিরে আসবে False(কারণ এটি প্রতিলিঙ্ক অনুসরণ করে) এবং আপনি একটি সিমিলিংক ডাকবেন shutil.rmtree(), যা উত্থাপন করবে OSError("Cannot call rmtree on a symbolic link")
রক্যালাইট

1
@ রোকলাইট আইসলিনিকে চেক দ্বারা ঠিক করা হয়েছে
কেভিনফ

1
এছাড়াও: @kevinf সঠিকভাবে symlinks islinkপরিচালনা করার জন্য এখানে একটি চেকের প্রয়োজনীয়তাটি সঠিকভাবে দেখানো ঠিক। আমি গ্রহণযোগ্য উত্তরে এ জাতীয় চেক যুক্ত করেছি।
মার্ক

20

এই:

  • সমস্ত প্রতীকী লিঙ্কগুলি সরিয়ে দেয়
    • মৃত লিঙ্ক
    • ডিরেক্টরিতে লিঙ্ক
    • ফাইল লিঙ্ক
  • উপ-ডিরেক্টরিগুলি সরিয়ে দেয়
  • প্যারেন্ট ডিরেক্টরি সরান না

কোড:

for filename in os.listdir(dirpath):
    filepath = os.path.join(dirpath, filename)
    try:
        shutil.rmtree(filepath)
    except OSError:
        os.remove(filepath)

অন্যান্য অনেক উত্তর হিসাবে, এটি ফাইল / ডিরেক্টরিগুলি অপসারণ সক্ষম করার জন্য অনুমতিগুলি সামঞ্জস্য করার চেষ্টা করে না।


15

অনেলাইনার হিসাবে:

import os

# Python 2.7
map( os.unlink, (os.path.join( mydir,f) for f in os.listdir(mydir)) )

# Python 3+
list( map( os.unlink, (os.path.join( mydir,f) for f in os.listdir(mydir)) ) )

ফাইল এবং ডিরেক্টরিগুলির জন্য আরও শক্তিশালী সমাধান অ্যাকাউন্টিং হবে (২. 2.):

def rm(f):
    if os.path.isdir(f): return os.rmdir(f)
    if os.path.isfile(f): return os.unlink(f)
    raise TypeError, 'must be either file or directory'

map( rm, (os.path.join( mydir,f) for f in os.listdir(mydir)) )

1
জেনারেটর ব্যবহার করে বড় অপারেশনগুলির জন্য ভগ্নাংশটি আরও কার্যকর হতে পারেmap( os.unlink, (os.path.join( mydir,f) for f in os.listdir(mydir)) )
user25064

প্রকৃতপক্ষে এটি ব্যবহারের চেষ্টা করে, উপলব্ধি করা হয়েছে যে মানচিত্রের অবজেক্টটি অবশ্যই পুনরাবৃত্তি করতে হবে তাই তালিকার জন্য একটি কল (বা পুনরুক্তি হবে এমন কিছু) যেমন প্রয়োজনlist(map(os.unlink, (os.path.join( mydir,f) for f in os.listdir(mydir))))
ইউজার 25064

প্রথমটির উত্তরে অন্তর্ভুক্ত করা হয়েছে, দ্বিতীয়টি আমার কাছে কোনও ধারণা রাখে না। পুনরাবৃত্তিযোগ্যকে ম্যাপযুক্ত কোনও ফাংশন দিয়ে কেন আপনার পুনরাবৃত্তি করা উচিত? মানচিত্র তা করে।
fmonegaglia

1
Python3, আপনি মোড়ানো আছে mapমধ্যে list আসলে পুনরুক্তি করতে। Http://stackoverflow.com/questions/1303347/getting-a-map-to-return-a-list-in-python-3-x

এই 'মাইদির'-এ কমপক্ষে একটি ফোল্ডার থাকলে অবশ্যই কাজ করবে না, কারণ
লিঙ্কগুলি

14

দ্রষ্টব্য: যদি কেউ আমার উত্তরটি ভোট দেয় তবে আমার এখানে কিছু ব্যাখ্যা করার দরকার আছে।

  1. প্রত্যেকে ছোট 'এন' সহজ উত্তর পছন্দ করে। তবে, কখনও কখনও বাস্তবতা এত সহজ হয় না।
  2. আমার উত্তর ফিরে। আমি জানি shutil.rmtree()একটি ডিরেক্টরি ট্রি মুছতে ব্যবহৃত হতে পারে। আমি নিজের প্রকল্পে এটি বহুবার ব্যবহার করেছি। তবে আপনাকে অবশ্যই বুঝতে হবে যে ডিরেক্টরিটি নিজে থেকেও মুছে ফেলা হবেshutil.rmtree() । এই কিছু গ্রহণযোগ্য হতে পারে, তাহলেও এটি জন্য একটি বৈধ উত্তর না একটি ফোল্ডার বিষয়বস্তু (পার্শ্ব প্রতিক্রিয়া ছাড়া) মুছে ফেলার
  3. আমি পার্শ্ব প্রতিক্রিয়াগুলির একটি উদাহরণ দেখাব। মনে করুন যে কাস্টমাইজড মালিক এবং মোড বিটের সাথে আপনার একটি ডিরেক্টরি রয়েছে , যেখানে প্রচুর সামগ্রী রয়েছে। তারপরে আপনি এটিকে মুছুন shutil.rmtree()এবং এটি দিয়ে পুনর্নির্মাণ করুন os.mkdir()। এবং এর পরিবর্তে আপনি ডিফল্ট (উত্তরাধিকারসূত্রে) মালিক এবং মোড বিটের একটি খালি ডিরেক্টরি পাবেন । আপনার সামগ্রীতে এবং এমনকি ডিরেক্টরি মুছে ফেলার অধিকার থাকতে পারে, আপনি সম্ভবত ডিরেক্টরিতে মূল মালিক এবং মোড বিটগুলি সেট করতে সক্ষম নাও হতে পারেন (যেমন আপনি কোনও সুপারভাইজার নন)।
  4. সবশেষে, ধৈর্য ধরুন এবং কোডটি পড়ুন । এটি দীর্ঘ এবং কুরুচিপূর্ণ (দৃষ্টিতে), তবে নির্ভরযোগ্য এবং দক্ষ (ব্যবহারে) প্রমাণিত।

এখানে একটি দীর্ঘ এবং কদর্য, তবে নির্ভরযোগ্য এবং দক্ষ সমাধান।

এটি কয়েকটি সমস্যা সমাধান করে যা অন্যান্য উত্তরদাতাদের দ্বারা সমাধান করা হয়নি:

  • এটি সঠিকভাবে প্রতীকী লিঙ্কগুলি পরিচালনা করে, সহ shutil.rmtree()একটি প্রতীকী লিঙ্কে কল না করা (যা os.path.isdir()এটি কোনও ডিরেক্টরিতে লিঙ্ক করলে পরীক্ষাটি পাস করবে ; এমনকি ফলাফলের মধ্যেও os.walk()প্রতীকী সংযুক্ত ডিরেক্টরি রয়েছে)।
  • এটি কেবল পঠনযোগ্য ফাইলগুলি দুর্দান্তভাবে পরিচালনা করে।

এখানে কোড (একমাত্র কার্যকর ফাংশনটি হ'ল clear_dir()):

import os
import stat
import shutil


# http://stackoverflow.com/questions/1889597/deleting-directory-in-python
def _remove_readonly(fn, path_, excinfo):
    # Handle read-only files and directories
    if fn is os.rmdir:
        os.chmod(path_, stat.S_IWRITE)
        os.rmdir(path_)
    elif fn is os.remove:
        os.lchmod(path_, stat.S_IWRITE)
        os.remove(path_)


def force_remove_file_or_symlink(path_):
    try:
        os.remove(path_)
    except OSError:
        os.lchmod(path_, stat.S_IWRITE)
        os.remove(path_)


# Code from shutil.rmtree()
def is_regular_dir(path_):
    try:
        mode = os.lstat(path_).st_mode
    except os.error:
        mode = 0
    return stat.S_ISDIR(mode)


def clear_dir(path_):
    if is_regular_dir(path_):
        # Given path is a directory, clear its content
        for name in os.listdir(path_):
            fullpath = os.path.join(path_, name)
            if is_regular_dir(fullpath):
                shutil.rmtree(fullpath, onerror=_remove_readonly)
            else:
                force_remove_file_or_symlink(fullpath)
    else:
        # Given path is a file or a symlink.
        # Raise an exception here to avoid accidentally clearing the content
        # of a symbolic linked directory.
        raise OSError("Cannot call clear_dir() on a symbolic link")

ফাইলের মোডটি পরিবর্তন করার অর্থ কী প্রসঙ্গে তা আমি বুঝতে পারি না। আমার ম্যাক, os.remove, অসদৃশrm ইউটিলিটি, যতদিন আপনি সেগুলির মালিক হিসাবে শুধুমাত্র পাঠযোগ্য ফাইল মুছে দিন খুশি। এদিকে, এটি যদি এমন কোনও ফাইলের মালিকানা না থাকে যা কেবলমাত্র আপনার কেবলমাত্র পাঠ্য অ্যাক্সেসে রয়েছে তবে আপনি এটি মুছতে বা অনুমতিগুলি পরিবর্তন করতে পারবেন না । আমি এমন কোনও সিস্টেমে এমন কোনও পরিস্থিতি জানি না যেখানে আপনি কেবল পঠনযোগ্য ফাইল মুছতে সক্ষম হবেন না os.removeতবে এর অনুমতিগুলি পরিবর্তন করতে সক্ষম হবেন। তদুপরি, আপনি ব্যবহার lchmodকরেন যা আমার ম্যাকে বা উইন্ডোজের ডক্স অনুসারে বিদ্যমান নেই। এই কোডটি কী প্ল্যাটফর্মের জন্য বোঝানো হয়েছে ?!
মার্ক

14

আমি অবাক হয়েছি কেউ pathlibএই কাজটি করার জন্য দুর্দান্তটির কথা উল্লেখ করেনি ।

আপনি যদি কেবল একটি ডিরেক্টরিতে ফাইলগুলি সরাতে চান তবে এটি অনলাইনার হতে পারে

from pathlib import Path

[f.unlink() for f in Path("/path/to/folder").glob("*") if f.is_file()] 

পুনরাবৃত্তভাবে ডিরেক্টরিগুলি মুছে ফেলার জন্য আপনি এরকম কিছু লিখতে পারেন:

from pathlib import Path
from shutil import rmtree

for path in Path("/path/to/folder").glob("**/*"):
    if path.is_file():
        path.unlink()
    elif path.is_dir():
        rmtree(path)

1
.iterdir()পরিবর্তে .glob(...)এছাড়াও কাজ করা উচিত।
এস। কি

11
import os
import shutil

# Gather directory contents
contents = [os.path.join(target_dir, i) for i in os.listdir(target_dir)]

# Iterate and remove each item in the appropriate manner
[os.remove(i) if os.path.isfile(i) or os.path.islink(i) else shutil.rmtree(i) for i in contents]

পূর্বের একটি মন্তব্যে পাইথন 3.5++ এ os.scandir ব্যবহার করার কথাও বলা হয়েছে। উদাহরণ স্বরূপ:

import os
import shutil

with os.scandir(target_dir) as entries:
    for entry in entries:
        if entry.is_file() or entry.is_symlink():
            os.remove(entry.path)
        elif entry.is_dir():
            shutil.rmtree(entry.path)

1
os.path.isdir()নিয়মিত ডিরেক্টরি এবং একটি প্রতীকী লিঙ্কের মধ্যে পার্থক্য করার কোনও বৈধ উপায় নয়। shutil.rmtree()প্রতীকী লিঙ্কে কল করা OSErrorব্যতিক্রম বাড়িয়ে তুলবে ।
রক্যালাইট

ধন্যবাদ রোকালাইট তুমি ঠিক বলছো. আমি উদাহরণ আপডেট।
জ্যাকব ওয়ান

8

আপনি এটি ব্যবহার করে ভাল হতে পারে os.walk()

os.listdir()ডিরেক্টরিগুলি থেকে ফাইলগুলি পৃথক করে না এবং এগুলি লিঙ্কমুক্ত করার চেষ্টা করে আপনি দ্রুত সমস্যায় পড়বেন। সেখানে ব্যবহারের একটি ভাল উদাহরণ os.walk()যাও recursively একটি ডিরেক্টরি মুছে ফেলার জন্য এখানে কিভাবে আপনার পরিস্থিতিতে এটা মানিয়ে উপর নির্দেশ, এবং।


6

আমি এইভাবে সমস্যার সমাধান করতাম:

import shutil
import os

shutil.rmtree(dirpath)
os.mkdir(dirpath)

7
এতে প্রশ্নটি যা জিজ্ঞাসা করে তার থেকে মূল শব্দটির আলাদা আলাদা শব্দ রয়েছে এবং একটি বৈধ উত্তর হিসাবে বিবেচনা করা উচিত নয়।
ফতুহোকু

1
শ্রদ্ধার সাথে আমি মনে করি "স্থানীয় ফোল্ডারের বিষয়বস্তু মুছুন" এতে ফোল্ডারটি সরিয়ে নেওয়া জড়িত না। এই উত্তর হিসাবে একই সমস্যা , যে এক ছাড়াও প্রচুর upvotes পেয়েছেন!
ফতুহোকু

3
এটি প্রশ্নের উত্তর দেওয়ার মতো "পাইথনের 1 নম্বরটি কীভাবে ফাংশন করব?" ডিফ রিটার্ন_এ_এন () দিয়ে: লঞ্চ_সোম_নোকস () রিটার্ন 1
ফতুহোকু

2
অবশ্যই শব্দার্থবিজ্ঞান আলাদা: তবে আপনি সম্ভবত সমস্যাটিকে দেখার অন্য উপায় হিসাবে বিবেচনা করতে পারেন। সমস্যা সমাধান করার সাথে সাথে এই সমাধানটি পুরোপুরি বৈধ। আপনার 'লঞ্চ_সোম_নুকস' উদাহরণে একটি পার্থক্য রয়েছে: ১. সমাধানটি গ্রহণযোগ্যটির চেয়ে কম এবং সহজ এবং আপনি যে উত্তরটি উদ্ধৃত করেছেন তার বিপরীতে এটি বৈধ। 2. এই ক্ষেত্রে 'লঞ্চ_সোম_নুকস' সমতুল্য একটি ফোল্ডার মোছা এবং পুনরায় তৈরি করা। পুরানো এবং নতুন ফোল্ডারের মধ্যে পার্থক্যটি কেবলমাত্র
ইনোড

2
এটি বরং আকাশচুম্বী
স্থানটি

5

তবুও আরেকটি সমাধান:

import sh
sh.rm(sh.glob('/path/to/folder/*'))

1
নোট করুন যে shস্ট্যান্ডার্ড লাইব্রেরির অংশ নয় এবং এটি ব্যবহারের আগে পিপিআই থেকে ইনস্টল করা দরকার। এছাড়াও, যেহেতু এটি প্রকৃতপক্ষে rmএকটি উপ-প্রসেসে আহ্বান জানায় , এটি উইন্ডোতে কাজ করবে না যেখানে rmঅস্তিত্ব নেই। যদি ফোল্ডারে কোনও উপ-ডিরেক্টরি থাকে তবে এটি একটি ব্যতিক্রমও বাড়িয়ে তুলবে।
মার্ক

5

আমি জানতাম এটি একটি পুরানো থ্রেড তবে পাইথনের অফিসিয়াল সাইট থেকে আমি আকর্ষণীয় কিছু পেয়েছি। কোনও ডিরেক্টরিতে সমস্ত সামগ্রী মুছে ফেলার জন্য অন্য একটি ধারণা ভাগ করার জন্য sharing কারণ shutil.rmtree () ব্যবহার করার সময় আমার অনুমোদনের কিছু সমস্যা রয়েছে এবং আমি ডিরেক্টরিটি সরিয়ে আবার এটি পুনরায় তৈরি করতে চাই না। ঠিকানাটি মূল http://docs.python.org/2/library/os.html#os.walk । আশা করি যে কাউকে সাহায্য করতে পারে।

def emptydir(top):
    if(top == '/' or top == "\\"): return
    else:
        for root, dirs, files in os.walk(top, topdown=False):
            for name in files:
                os.remove(os.path.join(root, name))
            for name in dirs:
                os.rmdir(os.path.join(root, name))

4

ডিরেক্টরিগুলির ভিতরে থাকা সমস্ত ফাইল এবং উপ-ডিরেক্টরিগুলি মুছে ফেলার জন্য, ফোল্ডারগুলি নিজেরাই সরিয়ে না দিয়ে কেবল এটি করুন:

import os
mypath = "my_folder" #Enter your path here
for root, dirs, files in os.walk(mypath):
    for file in files:
        os.remove(os.path.join(root, file))

3

আপনি যদি * নিক্স সিস্টেম ব্যবহার করে থাকেন তবে সিস্টেম কমান্ডটি কেন উপস্থাপন করবেন না?

import os
path = 'folder/to/clean'
os.system('rm -rf %s/*' % path)

3
কারণ, যেমন প্রশ্নে বলা হয়েছে, "বর্তমান প্রকল্পটি উইন্ডোজের জন্য"
sox মনিকার সাথে

3

এটি করার অত্যন্ত স্বজ্ঞাত উপায়:

import shutil, os


def remove_folder_contents(path):
    shutil.rmtree(path)
    os.makedirs(path)


remove_folder_contents('/path/to/folder')

3

ঠিক আছে, আমি মনে করি এই কোডটি কাজ করছে। এটি ফোল্ডারটি মুছবে না এবং আপনি এই কোডটি নির্দিষ্ট এক্সটেনশানযুক্ত ফাইলগুলি মুছতে ব্যবহার করতে পারেন।

import os
import glob

files = glob.glob(r'path/*')
for items in files:
    os.remove(items)

3

আমাকে একটি একক পিতামাতার ডিরেক্টরিতে 3 পৃথক ফোল্ডার থেকে ফাইলগুলি সরিয়ে ফেলতে হয়েছিল:

directory
   folderA
      file1
   folderB
      file2
   folderC
      file3

এই সহজ কোডটি আমার জন্য কৌশলটি করেছে: (আমি ইউনিক্সে আছি)

import os
import glob

folders = glob.glob('./path/to/parentdir/*')
for fo in folders:
  file = glob.glob(f'{fo}/*')
  for f in file:
    os.remove(f)

আশাকরি এটা সাহায্য করবে.


1

আমি এর মধ্যে rmtree makedirsযোগ করে সমস্যাটি সমাধান করেছি time.sleep():

if os.path.isdir(folder_location):
    shutil.rmtree(folder_location)

time.sleep(.5)

os.makedirs(folder_location, 0o777)

0

একটি সীমাবদ্ধ, নির্দিষ্ট পরিস্থিতির জন্য উত্তর: ধরে নিচ্ছেন সাব-ফোল্ডার গাছ বজায় রাখার সময় আপনি ফাইলগুলি মুছতে চান, আপনি পুনরাবৃত্তির অ্যালগোরিদম ব্যবহার করতে পারেন:

import os

def recursively_remove_files(f):
    if os.path.isfile(f):
        os.unlink(f)
    elif os.path.isdir(f):
        for fi in os.listdir(f):
            recursively_remove_files(os.path.join(f, fi))

recursively_remove_files(my_directory)

সম্ভবত সামান্য অফ-টপিক, তবে আমি মনে করি এটি অনেকের পক্ষে দরকারী হবে


ব্যবহার os.walkভাবে দেখানো মধ্যে stackoverflow.com/a/54889532/1709587 সম্ভবত যখন ডিরেক্টরি গঠন অক্ষত রেখে সমস্ত ফাইল মুছে একটি সুন্দর উপায়।
মার্ক

-1

temp_dirমুছে ফেলা হচ্ছে বলে ধরে osনিলে , একটি একক লাইন কমান্ডটি হ'ল :

_ = [os.remove(os.path.join(save_dir,i)) for i in os.listdir(temp_dir)]

দ্রষ্টব্য: এটি ফাইল মুছে ফেলার জন্য কেবল 1-লাইনার 'ডিরেক্টরিগুলি মুছবে না।

আশাকরি এটা সাহায্য করবে. ধন্যবাদ।


-1

ডিরেক্টরিটি নয়, কোনও ডিরেক্টরিতে থাকা বিষয়বস্তু সরিয়ে ফেলতে পদ্ধতিটি বেলোটি ব্যবহার করুন:

import os
import shutil

def remove_contents(path):
    for c in os.listdir(path):
        full_path = os.path.join(path, c)
        if os.path.isfile(full_path):
            os.remove(full_path)
        else:
            shutil.rmtree(full_path)

@ ফ্যাবিওস্প্যাগেটি নেতিবাচক
আমির রেজাজ্জাদে

আপনাকে ধন্যবাদ আমির, আমি এমন একটি সমাধান
খুঁজছি

এটি আপনাকে নতুন পোস্ট করার আগে গ্রহণযোগ্য উত্তরের বছরগুলিতে ইতিমধ্যে প্রদর্শিত হয়নি এমন নতুন কোনও কিছুই যুক্ত করে না।
মার্ক

-1

কোনও ফোল্ডারে সমস্ত ফাইল মুছে ফেলা / সব ফাইল মুছে ফেলার সহজ উপায়

import os
files = os.listdir(yourFilePath)
for f in files:
    os.remove(yourFilePath + f)

সাব-ডিরেক্টরি থাকলে ব্যর্থ হয়।
মার্ক

-3

এটি ওএস মডিউলটি তালিকার জন্য ব্যবহার করে কৌশলটি করা উচিত এবং তারপরে অপসারণ করা উচিত!

import os
DIR = os.list('Folder')
for i in range(len(DIR)):
    os.remove('Folder'+chr(92)+i)

আমার জন্য কাজ করেছেন, যে কোনও সমস্যা আমাকে জানান!

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