ফাইলটি filename
উপস্থিত থাকলে মুছতে চাই to বলা কি যথাযথ?
if os.path.exists(filename):
os.remove(filename)
একটি ভাল উপায় আছে কি? এক লাইনের পথ?
unlink
এবং এটি নেমস্পেস পিএইচপি রাখুন।
ফাইলটি filename
উপস্থিত থাকলে মুছতে চাই to বলা কি যথাযথ?
if os.path.exists(filename):
os.remove(filename)
একটি ভাল উপায় আছে কি? এক লাইনের পথ?
unlink
এবং এটি নেমস্পেস পিএইচপি রাখুন।
উত্তর:
আরও অজগর উপায় হ'ল:
try:
os.remove(filename)
except OSError:
pass
যদিও এটি আরও বেশি লাইন নিয়েছে এবং খুব কুৎসিত দেখাচ্ছে, এটি অযৌক্তিক কলটি এড়িয়ে যায় os.path.exists()
এবং অতিরিক্ত ব্যতিক্রমগুলির অজগর কনভেনশন অনুসরণ করে।
আপনার জন্য এটি করার জন্য কোনও ফাংশন লিখে রাখা সার্থক হতে পারে:
import os, errno
def silentremove(filename):
try:
os.remove(filename)
except OSError as e: # this would be "except OSError, e:" before Python 2.6
if e.errno != errno.ENOENT: # errno.ENOENT = no such file or directory
raise # re-raise exception if a different error occurred
os.path.exists()
মৃত্যুদন্ড কার্যকর করার সময় ফাইলটি উপস্থিত থাকার অর্থ এই নয় যে os.remove()
মৃত্যুদন্ড কার্যকর করার সময় এটি উপস্থিত থাকে ।
টেকটিউ বাগটি এড়াতে আমি ফাইলটির অস্তিত্ব পরীক্ষা করার চেয়ে একটি ব্যতিক্রমকে দমন করতে পছন্দ করি । ম্যাট এর উত্তর এটির একটি ভাল উদাহরণ, তবে আমরা পাইথন 3 এর অধীনে এটিকে কিছুটা সহজ করতে পারি contextlib.suppress()
:
import contextlib
with contextlib.suppress(FileNotFoundError):
os.remove(filename)
যদি স্ট্রিংয়ের পরিবর্তে filename
কোনও pathlib.Path
অবজেক্ট হয় তবে আমরা .unlink()
ব্যবহার না করে তার পদ্ধতিটি কল করতে পারিos.remove()
। আমার অভিজ্ঞতায়, ফাইল সিস্টেম ম্যানিপুলেশনের জন্য স্ট্রিংয়ের চেয়ে পাথ অবজেক্টগুলি বেশি কার্যকর।
যেহেতু এই উত্তরের সমস্ত কিছুই পাইথন 3 এ একচেটিয়া, তাই এটি আপগ্রেড করার আরও একটি কারণ সরবরাহ করে।
unlink(2)
, এটি এখানকার প্রাচীনতম প্রাসঙ্গিক ইন্টারফেস।
except
ধারা প্রয়োজন , তবে আপনার try
/ ব্যবহার করা উচিত except
। এটি অর্থপূর্ণভাবে সংক্ষিপ্ত করা যাবে না, কারণ আপনার অবশ্যই প্রথম ব্লকটি পরিচয় করানোর জন্য একটি লাইন থাকতে হবে, ব্লকটি নিজেই, দ্বিতীয় ব্লকের প্রবর্তনের জন্য একটি লাইন এবং তারপরে সেই ব্লকটি, সুতরাং try
/ except
ইতিমধ্যে যতটা সম্ভব ক্ষুদ্রতর।
os.path.exists
True
ফোল্ডারগুলির পাশাপাশি ফাইলগুলির জন্য ফেরত দেয় । os.path.isfile
পরিবর্তে ফাইলটি বিদ্যমান কিনা তা পরীক্ষা করার জন্য বিবেচনা করুন ।
অ্যান্ডি জোনসের জবাবের অনুপ্রেরণায়, কীভাবে একটি খাঁটি টের্নারি অপারেশন সম্পর্কে:
os.remove(fn) if os.path.exists(fn) else None
ফাইল (বা ফাইল) বিদ্যমান আছে কিনা তা জানার এবং এটি অপসারণের আরেকটি উপায় মডিউল গ্লোব ব্যবহার করছে।
from glob import glob
import os
for filename in glob("*.csv"):
os.remove(filename)
গ্লোব এমন সমস্ত ফাইল সন্ধান করে যা * নিক্স ওয়াইল্ডকার্ডের সাহায্যে প্যাটার্নটি নির্বাচন করতে পারে এবং তালিকাটি লুপ করে।
পাইথন ৩.৮ হিসাবে, ব্যবহার করুন missing_ok=True
এবং pathlib.Path.unlink
( এখানে ডক্স )
from pathlib import Path
my_file = Path("./dir1/dir2/file.txt")
# Python 3.8+
my_file.unlink(missing_ok=True)
# Python 3.7 and earlier
if my_file.exists():
my_file.unlink()
ম্যাট এর উত্তরটি পুরানো পাইথনসের জন্য সঠিক এবং নতুনদের জন্য কেভিনের সঠিক উত্তর।
আপনি যদি ফাংশনটির অনুলিপি না করতে চান তবে silentremove
এই কার্যকারিতাটি path.py এ অপসারণ_পি হিসাবে প্রকাশ করা হবে :
from path import Path
Path(filename).remove_p()
if os.path.exists(filename): os.remove(filename)
ওয়ান লাইনার
আপনারা অনেকেই দ্বিমত পোষণ করতে পারেন - সম্ভবত "কুরুচিপূর্ণ" টার্নারিগুলির প্রস্তাবিত ব্যবহার বিবেচনা করার মতো কারণগুলির জন্য - তবে এটি এই প্রশ্নটি জাগিয়ে তোলে যে তারা যখন অ-মানক "কুশ্রী" বলে তখন আমরা কুৎসিত মানদণ্ডে ব্যবহৃত লোকেরা কী শুনতে পারা উচিত।
পাইথন ৩.৪ বা তার পরবর্তী সংস্করণে পাইথোনিক উপায়টি হ'ল:
import os
from contextlib import suppress
with suppress(OSError):
os.remove(filename)
এটার মতো কিছু? শর্ট সার্কিট মূল্যায়নের সুবিধা নেয়। যদি ফাইলটি বিদ্যমান না থাকে তবে পুরো শর্তসাপেক্ষ সত্য হতে পারে না, সুতরাং পাইথন দ্বিতীয় অংশের মূল্যায়নকে বিরক্ত করবে না।
os.path.exists("gogogo.php") and os.remove("gogogo.php")
একটি KISS অফার:
def remove_if_exists(filename):
if os.path.exists(filename):
os.remove(filename)
এবং তারপর:
remove_if_exists("my.file")
আমি ব্যবহার করেছি rm
যা --preserve-root
কোন বিকল্প হিসাবে অস্তিত্বহীন ফাইলগুলি মুছতে বাধ্য করতে পারে rm
।
--preserve-root
do not remove `/' (default)
rm --help | grep "force"
-f, --force ignore nonexistent files and arguments, never prompt
আমরা নিরাপদ-আরএম ( sudo apt-get install safe-rm
) ব্যবহার করতে পারি
সেফ-আরএম একটি সুরক্ষার সরঞ্জাম যা একটি আবরণ দিয়ে / বিন / আরএম প্রতিস্থাপনের মাধ্যমে গুরুত্বপূর্ণ ফাইলগুলির দুর্ঘটনাক্রমে মুছে ফেলা রোধ করে, যা ফাইল এবং ডিরেক্টরিগুলির একটি কনফিগারযোগ্য ব্ল্যাকলিস্টের বিরুদ্ধে প্রদত্ত যুক্তিগুলি পরীক্ষা করে যা কখনও অপসারণ করা উচিত নয়।
প্রথমে আমি ফোল্ডার / ফাইলের पथ বিদ্যমান কিনা তা পরীক্ষা করে দেখি। এটি চলক ফাইলটিও /
সরানো ফোল্ডারটিওআরমোভ to the string
-r / setting সেট করতে প্রতিরোধ করবে `
import os, subprocess
fileToRemove = '/home/user/fileName';
if os.path.isfile(fileToRemove):
subprocess.run(['rm', '-f', '--preserve-root', fileToRemove]
subprocess.run(['safe-rm', '-f', fileToRemove]
rm
নিরাপদে ব্যবহার এবং প্রতিরোধ করার জন্য যুক্ত করেছি rm -r /
। @JonBrave
rm -f --preserve-root
যথেষ্ট ভাল না ( --preserve-root
সম্ভবত যাইহোক এটি ডিফল্ট)। আমি -r /
উদাহরণ হিসাবে দিয়েছি , তা যদি হয় -r /home
বা যাই হোক না কেন? আপনি সম্ভবত চান rm -f -- $fileToRemove
, কিন্তু এটি পয়েন্ট নয়।
os.system('rm ...')
করা অত্যন্ত বিপজ্জনক, দুঃখিত।