কিভাবে একটি ফাইল বা ফোল্ডার মুছবেন?


উত্তর:


3337
  • os.remove() একটি ফাইল সরান।

  • os.rmdir() একটি খালি ডিরেক্টরি সরিয়ে দেয়।

  • shutil.rmtree() একটি ডিরেক্টরি এবং এর সমস্ত সামগ্রী মুছে দেয়।


Pathপাইথন ৩.৪++ pathlibমডিউল থেকে প্রাপ্ত বস্তুগুলিও এই উদাহরণ পদ্ধতিগুলি প্রকাশ করে:

  • pathlib.Path.unlink() কোনও ফাইল বা প্রতীকী লিঙ্ক সরিয়ে দেয়।

  • pathlib.Path.rmdir() একটি খালি ডিরেক্টরি সরিয়ে দেয়।


5
উইন্ডোজে os.rmdir () লক্ষ্য
সীমাটি

8
যদি ফাইলটি বিদ্যমান না থাকে তবে os.remove()একটি ব্যতিক্রম ছুঁড়ে ফেলেছে, তাই os.path.isfile()প্রথমে চেক করা প্রয়োজন বা একটিতে মোড়ানো প্রয়োজন try
বেন ক্রোয়েল

2
আমি কামনা করি পাথ.উনলিংক 1 / ছিল পুনরাবৃত্ত 2 / ফাইলনটফাউন্ডআরার উপেক্ষা করার জন্য একটি বিকল্প যুক্ত করুন।
জুলাইমে

7
কেবল সমাপ্তির জন্য ... os.remove()যদি কোনও ফাইল উপস্থিত না থাকে তবে ছুঁড়ে দেওয়া ব্যতিক্রম FileNotFoundError
পেড্রোএ

না os.remove() একাধিক আর্গুমেন্ট গ্রহণ করা একাধিক ফাইল মুছে ফেলতে, অথবা আপনি এটি প্রতিটি ফাইল জন্য প্রতিবার কল?
user742864

290

পাইথন সিনট্যাক্স একটি ফাইল মুছতে

import os
os.remove("/tmp/<file_name>.txt")

অথবা

import os
os.unlink("/tmp/<file_name>.txt")

অথবা

পাইথন সংস্করণ> 3.5 এর জন্য প্যাথলিব পাঠাগার

file_to_rem = pathlib.Path("/tmp/<file_name>.txt")
file_to_rem.unlink()

Path.unlink (missing_ok = মিথ্যা)

ফাইল বা সিম্বলিক লিঙ্ক অপসারণ করতে ব্যবহৃত লিঙ্ক লিঙ্ক।

যদি মিসিং_ওকটি মিথ্যা (ডিফল্ট) হয়, যদি পথের অস্তিত্ব না থাকে তবে ফাইলনটফাউন্ডআরার উত্থাপিত হয়।
যদি মিসিং_ওক সত্য হয়, ফাইলনটফাউন্ডআরর ব্যতিক্রমগুলি উপেক্ষা করা হবে (POSIX rm -f কমান্ডের মতো একই আচরণ)।
সংস্করণ ৩.৮ এ পরিবর্তিত হয়েছে: অনুপস্থিত_ক পরামিতি যুক্ত করা হয়েছে।

ভাল অভ্যাস

  1. প্রথমে পরীক্ষা করুন যে ফাইল বা ফোল্ডারটি আছে কি না তবে কেবলমাত্র সেই ফাইলটি মুছুন। এটি দুটি উপায়ে অর্জন করা যায়:
    ক। os.path.isfile("/path/to/file")
    খ। ব্যবহারexception handling.

EXAMPLE টি জন্যos.path.isfile

#!/usr/bin/python
import os
myfile="/tmp/foo.txt"

## If file exists, delete it ##
if os.path.isfile(myfile):
    os.remove(myfile)
else:    ## Show an error ##
    print("Error: %s file not found" % myfile)

ব্যতিক্রম হ্যান্ডলিং

#!/usr/bin/python
import os

## Get input ##
myfile= raw_input("Enter file name to delete: ")

## Try to delete the file ##
try:
    os.remove(myfile)
except OSError as e:  ## if failed, report it back to the user ##
    print ("Error: %s - %s." % (e.filename, e.strerror))

প্রতিক্রিয়াশীল আউটপুট

মুছে ফেলার জন্য ফাইলের নাম লিখুন: ডেমো.টি.এস.
ত্রুটি: ডেমো টেক্সট - এরকম কোনও ফাইল বা ডিরেক্টরি নেই।

মুছে ফেলার জন্য ফাইলের নাম লিখুন: rrr.txt
ত্রুটি: rrr.txt - অপারেশন অনুমোদিত নয়।

মুছতে ফাইলের নাম প্রবেশ করুন: foo.txt

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

shutil.rmtree()

উদাহরণস্বরূপ shutil.rmtree()

#!/usr/bin/python
import os
import sys
import shutil

# Get directory name
mydir= raw_input("Enter directory name: ")

## Try to remove tree; if failed show an error using try...except on screen
try:
    shutil.rmtree(mydir)
except OSError as e:
    print ("Error: %s - %s." % (e.filename, e.strerror))

13
ব্যতিক্রম হ্যান্ডলিং পরীক্ষণ কারণ ফাইলটি সরানো বা দুই লাইন (TOCTOU: মধ্যে পরিবর্তিত হতে পারে ধরে বাঞ্ছনীয় en.wikipedia.org/wiki/Time_of_check_to_time_of_use ) দেখুন পাইথন প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী docs.python.org/3/glossary.html#term-eafp
এরিক আরাউজো

83

ব্যবহার

shutil.rmtree(path[, ignore_errors[, onerror]])

( শিউটিলে সম্পূর্ণ ডকুমেন্টেশন দেখুন ) এবং / অথবা

os.remove

এবং

os.rmdir

( ওএস এ সম্পূর্ণ ডকুমেন্টেশন ।)


6
দয়া করে আপনার তালিকায় পাথলিব ইন্টারফেস (পাইথন ৩.৪ থেকে নতুন) যুক্ত করুন।
পায়েবেলস

38

এখানে একটি শক্তিশালী ফাংশন যা উভয় os.removeএবং shutil.rmtree:

def remove(path):
    """ param <path> could either be relative or absolute. """
    if os.path.isfile(path) or os.path.islink(path):
        os.remove(path)  # remove the file
    elif os.path.isdir(path):
        shutil.rmtree(path)  # remove dir and all contains
    else:
        raise ValueError("file {} is not a file or dir.".format(path))

8
অর্থাৎ আইএসও সি remove(path);কল অনুকরণের জন্য কোডের ৮ টি লাইন ।
কাজ

2
@ কাজ বিরক্তিকর হয়ে রাজী, কিন্তু গাছের সাথে চুক্তি সরিয়ে দেয়? :-)
সিরো সান্তিলি 冠状 病毒 审查 六四 事件 法轮功

5
os.path.islink(file_path): একটি বাগ, হওয়া উচিতos.path.islink(path):
নিও লি

32

আপনি ব্যবহার করতে পারেন বিল্ট-ইন pathlibমডিউল (পাইথন 3.4+ প্রয়োজন, কিন্তু সেখানে PyPI উপর পুরোনো সংস্করণের জন্য ব্যাকপোর্ট আছেন: pathlib, pathlib2)।

একটি ফাইল সরানোর জন্য unlinkপদ্ধতি রয়েছে:

import pathlib
path = pathlib.Path(name_of_file)
path.unlink()

অথবা rmdirএকটি খালি ফোল্ডার সরানোর পদ্ধতি :

import pathlib
path = pathlib.Path(name_of_folder)
path.rmdir()

2
যদিও একটি খালি নন ডিরেক্টরি সম্পর্কে?
প্রণাসাস

@ প্রানাসাস দুর্ভাগ্যক্রমে মনে হয় pathlibযে খালি নয় এমন ডিরেক্টরি মুছে ফেলার জন্য হ্যান্ডেল করতে পারে এমন কিছুই (দেশীয়ভাবে) নেই । তবে আপনি ব্যবহার করতে পারেন shutil.rmtree। এটি অন্যান্য উত্তরগুলির বেশ কয়েকটিতে উল্লেখ করা হয়েছে সুতরাং আমি এটি অন্তর্ভুক্ত করি নি।
এমসিফার্ট

29

আমি পাইথনের কোনও ফাইল বা ফোল্ডার কীভাবে মুছব?

পাইথন 3-এর জন্য পৃথকভাবে ফাইল এবং ডিরেক্টরি সরানোর জন্য যথাক্রমে unlinkএবং অবজেক্ট পদ্ধতিগুলি ব্যবহার করুন :rmdir Path

from pathlib import Path
dir_path = Path.home() / 'directory' 
file_path = dir_path / 'file'

file_path.unlink() # remove file

dir_path.rmdir()   # remove directory

মনে রাখবেন যে আপনি Pathঅবজেক্টগুলির সাথে আপেক্ষিক পাথগুলিও ব্যবহার করতে পারেন এবং আপনি আপনার বর্তমান ওয়ার্কিং ডিরেক্টরিটি এটি দিয়ে পরীক্ষা করতে পারেন Path.cwd

পাইথন 2 এ পৃথক ফাইল এবং ডিরেক্টরিগুলি সরানোর জন্য, নীচে এতগুলি লেবেলযুক্ত বিভাগটি দেখুন।

বিষয়বস্তু সহ একটি ডিরেক্টরি সরানোর জন্য, ব্যবহার করুন shutil.rmtreeএবং নোট করুন যে এটি পাইথন 2 এবং 3 তে উপলব্ধ:

from shutil import rmtree

rmtree(dir_path)

প্রদর্শন

পাইথন ৩.৪-এ নতুন Pathobject

ব্যবহার প্রদর্শনের জন্য ডিরেক্টরি এবং ফাইল তৈরি করতে একটি ব্যবহার করি। নোট করুন যে আমরা /পথের অংশগুলিতে যোগদানের জন্য ব্যবহার করি , এটি অপারেটিং সিস্টেম এবং উইন্ডোজে ব্যাকস্ল্যাশ ব্যবহার করা সম্পর্কিত সমস্যার মধ্যে কাজ করে (যেখানে আপনাকে আপনার ব্যাকস্ল্যাশগুলির মতো দ্বিগুণ করতে হবে \\বা কাঁচা স্ট্রিং ব্যবহার করতে হবে, যেমন r"foo\bar"):

from pathlib import Path

# .home() is new in 3.5, otherwise use os.path.expanduser('~')
directory_path = Path.home() / 'directory'
directory_path.mkdir()

file_path = directory_path / 'file'
file_path.touch()

এবং এখন:

>>> file_path.is_file()
True

এখন তাদের মুছে দিন। প্রথম ফাইল:

>>> file_path.unlink()     # remove file
>>> file_path.is_file()
False
>>> file_path.exists()
False

আমরা একাধিক ফাইল অপসারণ করতে গ্লোব্বিং ব্যবহার করতে পারি - প্রথমে এর জন্য কয়েকটি ফাইল তৈরি করা যাক:

>>> (directory_path / 'foo.my').touch()
>>> (directory_path / 'bar.my').touch()

তারপরে কেবল গ্লোব প্যাটার্নটি নিয়ে পুনরাবৃত্তি করুন:

>>> for each_file_path in directory_path.glob('*.my'):
...     print(f'removing {each_file_path}')
...     each_file_path.unlink()
... 
removing ~/directory/foo.my
removing ~/directory/bar.my

এখন ডিরেক্টরিটি অপসারণ করে দেখানো হচ্ছে:

>>> directory_path.rmdir() # remove directory
>>> directory_path.is_dir()
False
>>> directory_path.exists()
False

আমরা যদি কোনও ডিরেক্টরি এবং এতে থাকা সমস্ত কিছু সরিয়ে দিতে চাই তবে কী হবে? এই ব্যবহারের ক্ষেত্রে, ব্যবহার করুনshutil.rmtree

আসুন আমাদের ডিরেক্টরি এবং ফাইলটি পুনরায় তৈরি করুন:

file_path.parent.mkdir()
file_path.touch()

এবং নোট করুন যে rmdirএটি খালি না হলে ব্যর্থ হয়, এ কারণেই rmtree এত সুবিধাজনক:

>>> directory_path.rmdir()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "~/anaconda3/lib/python3.6/pathlib.py", line 1270, in rmdir
    self._accessor.rmdir(self)
  File "~/anaconda3/lib/python3.6/pathlib.py", line 387, in wrapped
    return strfunc(str(pathobj), *args)
OSError: [Errno 39] Directory not empty: '/home/username/directory'

এখন, rmtree আমদানি করুন এবং ডিরেক্টরিটি ফান্টে দিন:

from shutil import rmtree
rmtree(directory_path)      # remove everything 

এবং আমরা দেখতে পাচ্ছি পুরো জিনিসটি সরানো হয়েছে:

>>> directory_path.exists()
False

পাইথন 2

আপনি যদি পাইথন 2 এ থাকেন তবে প্যাথলিব মডিউলটির একটি ব্যাকপোর্ট রয়েছে যা পাথলিব 2 বলে , যা পাইপ দিয়ে ইনস্টল করা যেতে পারে:

$ pip install pathlib2

এবং তারপরে আপনি লাইব্রেরিতে উপন্যাসটি করতে পারেন pathlib

import pathlib2 as pathlib

অথবা কেবলমাত্র Pathঅবজেক্টটি সরাসরি আমদানি করুন (এখানে প্রদর্শিত হিসাবে):

from pathlib2 import Path

যদি এটি খুব বেশি হয় তবে আপনি বা এর সাথে ফাইলগুলি সরাতে পারেনos.removeos.unlink

from os import unlink, remove
from os.path import join, expanduser

remove(join(expanduser('~'), 'directory/file'))

অথবা

unlink(join(expanduser('~'), 'directory/file'))

এবং আপনি এর সাথে ডিরেক্টরিগুলি মুছে ফেলতে পারেন os.rmdir:

from os import rmdir

rmdir(join(expanduser('~'), 'directory'))

মনে রাখবেন যে একটি রয়েছে os.removedirs- এটি কেবল খালি ডিরেক্টরিগুলি পুনরাবৃত্তভাবে অপসারণ করে তবে এটি আপনার ব্যবহারের ক্ষেত্রে উপযুক্ত।


rmtree(directory_path)পাইথন ৩.6..6 এ কাজ করে তবে পাইথন ৩.৩.২ এ নয় - আপনার rmtree(str(directory_path)))সেখানে দরকার ।
স্টেইন

4
import os

folder = '/Path/to/yourDir/'
fileList = os.listdir(folder)

for f in fileList:
    filePath = folder + '/'+f

    if os.path.isfile(filePath):
        os.remove(filePath)

    elif os.path.isdir(filePath):
        newFileList = os.listdir(filePath)
        for f1 in newFileList:
            insideFilePath = filePath + '/' + f1

            if os.path.isfile(insideFilePath):
                os.remove(insideFilePath)

1
এটি ফোল্ডারের কাঠামো অক্ষত রেখে কেবল ফোল্ডার এবং সাবফোল্ডারগুলির মধ্যে থাকা ফাইলগুলি মুছে
ফেলবে

4

shutil.rmtree হ'ল অ্যাসিনক্রোনাস ফাংশন, সুতরাং আপনি যদি এটি শেষ হয়ে যায় তা পরীক্ষা করতে চান তবে আপনি যখন ব্যবহার করতে পারেন ... লুপ

import os
import shutil

shutil.rmtree(path)

while os.path.exists(path):
  pass

print('done')

1
shutil.rmtreeঅ্যাসিক্রোনাস হওয়ার কথা নয়। তবে এটি ভাইরাস স্ক্যানারদের হস্তক্ষেপে উইন্ডোজে উপস্থিত হতে পারে।
মোহাম্মিথ

@mhsmith ভাইরাস স্ক্যানার ? এটি কি বন্য অনুমান, বা আপনি আসলে জানেন যে তারা এই প্রভাবের কারণ হতে পারে? পৃথিবীতে এমনটি যদি হয় তবে কীভাবে কাজ করে?
মার্ক আমেরিকা

2

ফাইলগুলি মুছে ফেলার জন্য:

os.unlink(path, *, dir_fd=None)

অথবা

os.remove(path, *, dir_fd=None)

উভয় ফাংশন শব্দার্থগতভাবে একই। এই ফাংশনগুলি ফাইলের পাথ সরিয়ে (মোছা) করে। যদি পথ কোনও ফাইল না হয় এবং এটি ডিরেক্টরি হয় তবে ব্যতিক্রম উত্থাপিত হবে।

ফোল্ডারগুলি মুছে ফেলার জন্য:

shutil.rmtree(path, ignore_errors=False, onerror=None)

অথবা

os.rmdir(path, *, dir_fd=None)

পুরো ডিরেক্টরি গাছগুলি সরানোর জন্য, shutil.rmtree()ব্যবহার করা যেতে পারে। os.rmdirকেবল তখনই কাজ করে যখন ডিরেক্টরি খালি থাকে এবং উপস্থিত থাকে।

পিতামাতার প্রতি পুনরাবৃত্তভাবে ফোল্ডারগুলি মোছার জন্য:

os.removedirs(name)

এটি পিতা-মাতার অবধি যে কোনও বিষয়বস্তু রয়েছে সে পর্যন্ত প্রতিটি খালি অভিভাবক ডিরেক্টরিটি সরিয়ে দেয়

প্রাক্তন। os.removedirs ('abc / xyz / pqr') ডিরেক্টরিগুলি 'abc / xyz / pqr', 'abc / xyz' এবং খালি থাকলে 'abc' দিয়ে সরিয়ে ফেলবে।

আরো তথ্য চেক কর্মকর্তা ডক জন্য: os.unlink, os.remove, os.rmdir, shutil.rmtree,os.removedirs


1

ফোল্ডারে সমস্ত ফাইল অপসারণ করতে

import os
import glob

files = glob.glob(os.path.join('path/to/folder/*'))
files = glob.glob(os.path.join('path/to/folder/*.csv')) // It will give all csv files in folder
for file in files:
    os.remove(file)

ডিরেক্টরিতে সমস্ত ফোল্ডার অপসারণ করতে

from shutil import rmtree
import os

// os.path.join()  # current working directory.

for dirct in os.listdir(os.path.join('path/to/folder')):
    rmtree(os.path.join('path/to/folder',dirct))

0

এরিক অ্যারাউজোর মন্তব্যে হাইলাইট করা টুটিইউ সমস্যাটি এড়াতে আপনি সঠিক পদ্ধতিটি কল করতে একটি ব্যতিক্রম ধরতে পারেন:

def remove_file_or_dir(path: str) -> None:
    """ Remove a file or directory """
    try:
        shutil.rmtree(path)
    except NotADirectoryError:
        os.remove(path)

যেহেতু shutil.rmtree()কেবল ডিরেক্টরিগুলি সরিয়ে ফেলবে এবং os.remove()বা os.unlink()কেবল ফাইলগুলি সরিয়ে দেবে।


shutil.rmtree()কেবল ডিরেক্টরিটিই নয় তবে এর সামগ্রীগুলিও সরিয়ে দেয়।
টিয়াগো মার্টিনস পেরেস

-1

subprocessযদি একটি সুন্দর এবং পঠনযোগ্য কোডটি আপনার চায়ের কাপ হয় তবে আমি এটি ব্যবহার করার পরামর্শ দিচ্ছি :

import subprocess
subprocess.Popen("rm -r my_dir", shell=True)

এবং যদি আপনি কোনও সফটওয়্যার ইঞ্জিনিয়ার না হন, তবে সম্ভবত জুপিটারটি ব্যবহার করার বিষয়টি বিবেচনা করুন; আপনি কেবল বাশ কমান্ড টাইপ করতে পারেন:

!rm -r my_dir

Ditionতিহ্যগতভাবে, আপনি ব্যবহার shutil:

import shutil
shutil.rmtree(my_dir) 

3
Subprocess এড়াতে অভ্যাস
dlewin

3
আমি subprocessএই জন্য সুপারিশ করব না । shutil.rmtreeনেই rm -rএর কাজ ঠিক সূক্ষ্ম, উইন্ডোস কাজ যোগ বোনাস সহ।
মার্ক অ্যামেরি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.