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


উত্তর:


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.