পাইথনে কোনও ফাইল বা ফোল্ডার কীভাবে মুছবেন?
পাইথনে কোনও ফাইল বা ফোল্ডার কীভাবে মুছবেন?
উত্তর:
os.remove()
একটি ফাইল সরান।
os.rmdir()
একটি খালি ডিরেক্টরি সরিয়ে দেয়।
shutil.rmtree()
একটি ডিরেক্টরি এবং এর সমস্ত সামগ্রী মুছে দেয়।
Path
পাইথন ৩.৪++ pathlib
মডিউল থেকে প্রাপ্ত বস্তুগুলিও এই উদাহরণ পদ্ধতিগুলি প্রকাশ করে:
pathlib.Path.unlink()
কোনও ফাইল বা প্রতীকী লিঙ্ক সরিয়ে দেয়।
pathlib.Path.rmdir()
একটি খালি ডিরেক্টরি সরিয়ে দেয়।
os.remove()
একটি ব্যতিক্রম ছুঁড়ে ফেলেছে, তাই os.path.isfile()
প্রথমে চেক করা প্রয়োজন বা একটিতে মোড়ানো প্রয়োজন try
।
os.remove()
যদি কোনও ফাইল উপস্থিত না থাকে তবে ছুঁড়ে দেওয়া ব্যতিক্রম FileNotFoundError
।
os.remove()
একাধিক আর্গুমেন্ট গ্রহণ করা একাধিক ফাইল মুছে ফেলতে, অথবা আপনি এটি প্রতিটি ফাইল জন্য প্রতিবার কল?
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()
ফাইল বা সিম্বলিক লিঙ্ক অপসারণ করতে ব্যবহৃত লিঙ্ক লিঙ্ক।
যদি মিসিং_ওকটি মিথ্যা (ডিফল্ট) হয়, যদি পথের অস্তিত্ব না থাকে তবে ফাইলনটফাউন্ডআরার উত্থাপিত হয়।
যদি মিসিং_ওক সত্য হয়, ফাইলনটফাউন্ডআরর ব্যতিক্রমগুলি উপেক্ষা করা হবে (POSIX rm -f কমান্ডের মতো একই আচরণ)।
সংস্করণ ৩.৮ এ পরিবর্তিত হয়েছে: অনুপস্থিত_ক পরামিতি যুক্ত করা হয়েছে।
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))
এখানে একটি শক্তিশালী ফাংশন যা উভয় 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))
remove(path);
কল অনুকরণের জন্য কোডের ৮ টি লাইন ।
os.path.islink(file_path):
একটি বাগ, হওয়া উচিতos.path.islink(path):
আপনি ব্যবহার করতে পারেন বিল্ট-ইন 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()
pathlib
যে খালি নয় এমন ডিরেক্টরি মুছে ফেলার জন্য হ্যান্ডেল করতে পারে এমন কিছুই (দেশীয়ভাবে) নেই । তবে আপনি ব্যবহার করতে পারেন shutil.rmtree
। এটি অন্যান্য উত্তরগুলির বেশ কয়েকটিতে উল্লেখ করা হয়েছে সুতরাং আমি এটি অন্তর্ভুক্ত করি নি।
আমি পাইথনের কোনও ফাইল বা ফোল্ডার কীভাবে মুছব?
পাইথন 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)
পাইথন ৩.৪-এ নতুন Path
object
ব্যবহার প্রদর্শনের জন্য ডিরেক্টরি এবং ফাইল তৈরি করতে একটি ব্যবহার করি। নোট করুন যে আমরা /
পথের অংশগুলিতে যোগদানের জন্য ব্যবহার করি , এটি অপারেটিং সিস্টেম এবং উইন্ডোজে ব্যাকস্ল্যাশ ব্যবহার করা সম্পর্কিত সমস্যার মধ্যে কাজ করে (যেখানে আপনাকে আপনার ব্যাকস্ল্যাশগুলির মতো দ্বিগুণ করতে হবে \\
বা কাঁচা স্ট্রিং ব্যবহার করতে হবে, যেমন 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 বলে , যা পাইপ দিয়ে ইনস্টল করা যেতে পারে:
$ pip install pathlib2
এবং তারপরে আপনি লাইব্রেরিতে উপন্যাসটি করতে পারেন pathlib
import pathlib2 as pathlib
অথবা কেবলমাত্র Path
অবজেক্টটি সরাসরি আমদানি করুন (এখানে প্রদর্শিত হিসাবে):
from pathlib2 import Path
যদি এটি খুব বেশি হয় তবে আপনি বা এর সাথে ফাইলগুলি সরাতে পারেনos.remove
os.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)))
সেখানে দরকার ।
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)
shutil.rmtree হ'ল অ্যাসিনক্রোনাস ফাংশন, সুতরাং আপনি যদি এটি শেষ হয়ে যায় তা পরীক্ষা করতে চান তবে আপনি যখন ব্যবহার করতে পারেন ... লুপ
import os
import shutil
shutil.rmtree(path)
while os.path.exists(path):
pass
print('done')
shutil.rmtree
অ্যাসিক্রোনাস হওয়ার কথা নয়। তবে এটি ভাইরাস স্ক্যানারদের হস্তক্ষেপে উইন্ডোজে উপস্থিত হতে পারে।
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
ফোল্ডারে সমস্ত ফাইল অপসারণ করতে
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))
এরিক অ্যারাউজোর মন্তব্যে হাইলাইট করা টুটিইউ সমস্যাটি এড়াতে আপনি সঠিক পদ্ধতিটি কল করতে একটি ব্যতিক্রম ধরতে পারেন:
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()
কেবল ডিরেক্টরিটিই নয় তবে এর সামগ্রীগুলিও সরিয়ে দেয়।
subprocess
যদি একটি সুন্দর এবং পঠনযোগ্য কোডটি আপনার চায়ের কাপ হয় তবে আমি এটি ব্যবহার করার পরামর্শ দিচ্ছি :
import subprocess
subprocess.Popen("rm -r my_dir", shell=True)
এবং যদি আপনি কোনও সফটওয়্যার ইঞ্জিনিয়ার না হন, তবে সম্ভবত জুপিটারটি ব্যবহার করার বিষয়টি বিবেচনা করুন; আপনি কেবল বাশ কমান্ড টাইপ করতে পারেন:
!rm -r my_dir
Ditionতিহ্যগতভাবে, আপনি ব্যবহার shutil
:
import shutil
shutil.rmtree(my_dir)
subprocess
এই জন্য সুপারিশ করব না । shutil.rmtree
নেই rm -r
এর কাজ ঠিক সূক্ষ্ম, উইন্ডোস কাজ যোগ বোনাস সহ।