ডিরেক্টরি আছে কিনা তা পরীক্ষা করে দেখুন এবং প্রয়োজনে এটি তৈরি করুন?
এর সরাসরি উত্তর হ'ল এমন একটি সাধারণ পরিস্থিতি ধরে নেওয়া যেখানে আপনি অন্যান্য ব্যবহারকারী বা প্রক্রিয়াগুলি আপনার ডিরেক্টরিতে গণ্ডগোলের প্রত্যাশা করবেন না:
if not os.path.exists(d):
os.makedirs(d)
অথবা যদি ডিরেক্টরিটি তৈরি করা হয় তবে এটি বর্ণের শর্ত সাপেক্ষে (যেমন যদি পথটি পরীক্ষা করার পরে থাকে তবে অন্য কিছু ইতিমধ্যে এটি তৈরি করেছে) এটি করুন:
import errno
try:
os.makedirs(d)
except OSError as exception:
if exception.errno != errno.EEXIST:
raise
তবে সম্ভবত এর থেকে আরও ভাল পদ্ধতির মাধ্যমে অস্থায়ী ডিরেক্টরিগুলি ব্যবহার করে রিসোর্স কনটেন্ট ইস্যুটির পক্ষপাত করা tempfile
:
import tempfile
d = tempfile.mkdtemp()
অনলাইন ডক থেকে প্রয়োজনীয়গুলি এখানে:
mkdtemp(suffix='', prefix='tmp', dir=None)
User-callable function to create and return a unique temporary
directory. The return value is the pathname of the directory.
The directory is readable, writable, and searchable only by the
creating user.
Caller is responsible for deleting the directory when done with it.
পাইথন 3.5 তে নতুন: pathlib.Path
সাথেexist_ok
Path
প্রচুর পদ্ধতির সাথে একটি নতুন অবজেক্ট রয়েছে (৩.৪.২ হিসাবে) যে কেউ পাথের সাথে ব্যবহার করতে চাইবে - এর মধ্যে একটি mkdir
।
(প্রসঙ্গে, আমি আমার সাপ্তাহিক সংবাদমাধ্যমের সাথে একটি স্ক্রিপ্ট ট্র্যাক করছি Here এখানে স্ক্রিপ্ট থেকে কোড সম্পর্কিত প্রাসঙ্গিক অংশ যা আমাকে একই তথ্যের জন্য দিনে একবারের বেশি স্ট্যাক ওভারফ্লো আঘাত এড়াতে দেয়।)
প্রথমে প্রাসঙ্গিক আমদানি:
from pathlib import Path
import tempfile
আমাদের os.path.join
এখনই মোকাবেলা করতে হবে না - কেবল একটি দিয়ে পথ অংশগুলিতে যোগদান করুন /
:
directory = Path(tempfile.gettempdir()) / 'sodata'
তারপরে আমি আদর্শের দ্বারা ডিরেক্টরিটি বিদ্যমান রয়েছে তা নিশ্চিত করি - exist_ok
যুক্তিটি পাইথন 3.5 তে প্রদর্শিত হয়:
directory.mkdir(exist_ok=True)
এখানে নথির প্রাসঙ্গিক অংশটি রয়েছে :
যদি exist_ok
সত্য হয় তবে FileExistsError
ব্যতিক্রমগুলি উপেক্ষা করা হবে ( POSIX mkdir -p
কমান্ডের মতো একই আচরণ ), তবে কেবলমাত্র যদি শেষ পাথ উপাদানটি কোনও অ-ডিরেক্টরি ফাইল না থাকে।
এখানে স্ক্রিপ্টের আরও কিছুটা রয়েছে - আমার ক্ষেত্রে, আমি কোনও রেসের শর্ত সাপেক্ষে নই, আমার কেবল একটি প্রক্রিয়া রয়েছে যা ডিরেক্টরি (বা ফাইলগুলিতে থাকা) থাকার প্রত্যাশা করে এবং আমার অপসারণের চেষ্টা করার কিছু নেই ডিরেক্টরি
todays_file = directory / str(datetime.datetime.utcnow().date())
if todays_file.exists():
logger.info("todays_file exists: " + str(todays_file))
df = pd.read_json(str(todays_file))
Path
str
অন্যান্য API গুলি যে str
পাথগুলি ব্যবহার করতে পারে আশা করে তাদের আগে অবজেক্টগুলিকে জোর করতে হবে।
অ্যাবস্ট্রাক্ট বেস ক্লাসের উদাহরণগুলি গ্রহণ করার জন্য সম্ভবত পান্ডাগুলি আপডেট করা উচিত os.PathLike
।