از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
ایجاد دایرکتوری و دایرکتوری های والد آن در پایتون
سرفصلهای مطلب
معرفی
در پایتون، ما اغلب نیاز به تعامل با سیستم فایل داریم، چه خواندن فایلها، نوشتن برای آنها یا ایجاد دایرکتوری. این بایت تمرکز خواهد کرد روی روش ایجاد دایرکتوری ها در پایتون، و به طور خاص تر، روش ایجاد یک دایرکتوری و هر دایرکتوری والد گمشده. ما کاوش خواهیم کرد os.mkdir
و os.makedirs
توابع برای این منظور.
چرا باید دایرکتوری های والد را ایجاد کنیم؟
هنگام کار با فایل سیستم، که برای ابزارها یا ابزارهای سیستم معمول است، احتمالاً باید یک فهرست در یک مسیر خاص ایجاد کنید. اگر دایرکتوری های والد آن مسیر وجود نداشته باشد، با خطا مواجه می شوید.
برای جلوگیری از این امر، باید همه دایرکتوری های والد ضروری را ایجاد کنید زیرا سیستم عامل/فایل سیستم این کار را برای شما انجام نمی دهد. با اطمینان از وجود تمام دایرکتوری های والد ضروری قبل از با ایجاد دایرکتوری هدف، می توانید از این خطاها جلوگیری کنید و پایگاه کد قابل اعتمادتری داشته باشید.
ایجاد دایرکتوری با استفاده از os.mkdir
این os.mkdir
تابع در پایتون برای ایجاد دایرکتوری استفاده می شود. این تابع مسیر دایرکتوری جدید را به عنوان آرگومان می گیرد. در اینجا یک مثال ساده آورده شده است:
import os
os.mkdir('my_dir')
این یک دایرکتوری جدید به نام ایجاد می کند my_dir
در فهرست کاری فعلی با این حال، os.mkdir
یک محدودیت دارد – فقط می تواند دایرکتوری نهایی را در مسیر مشخص شده ایجاد کند و فرض می کند که دایرکتوری های والد از قبل وجود دارند. اگر این کار را نکنند، شما یک دریافت خواهید کرد FileNotFoundError
.
import os
os.mkdir('parent_dir/my_dir')
اگر parent_dir
وجود ندارد، این کد یک را افزایش می دهد FileNotFoundError
.
توجه داشته باشید: این os.mkdir
تابع نیز a را افزایش می دهد FileExistsError
اگر دایرکتوری که می خواهید ایجاد کنید از قبل وجود داشته باشد. این همیشه یک تمرین خوب است که قبل از ایجاد دایرکتوری بررسی کنید که آیا دایرکتوری وجود دارد یا خیر. برای انجام این کار، می توانید عبور کنید exist_ok=True
استدلال، مانند این: os.makedirs(path, exist_ok=True)
. اگر دایرکتوری از قبل وجود داشته باشد، این کار باعث می شود که عملکرد هیچ کاری انجام ندهد.
یکی از راه های دور زدن محدودیت های os.mkdir
بررسی دستی و ایجاد هر دایرکتوری والد منتهی به دایرکتوری هدف است. ساده ترین راه برای نزدیک شدن به این مشکل این است که مسیر خود را با اسلش ها تقسیم کنیم و هر کدام را بررسی کنیم. در اینجا مثالی از روش انجام این کار آورده شده است:
import os
path = 'parent_dir/sub_dir/my_dir'
parts = path.split('/')
dir_path = ''
for part in parts:
dir_path = os.path.join(dir_path, part)
if not os.path.exists(dir_path):
os.mkdir(dir_path)
این کد ایجاد خواهد کرد parent_dir
، sub_dir
، و my_dir
اگر از قبل وجود نداشته باشند، اطمینان حاصل کنید که دایرکتوری های والد قبل از دایرکتوری هدف ایجاد شده اند.
با این حال، راه مختصرتری برای رسیدن به همان هدف با استفاده از آن وجود دارد os.makedirs
تابعی که در بخش بعدی خواهیم دید.
ایجاد دایرکتوری های والد با استفاده از os.makedirs
برای غلبه بر محدودیت os.mkdir
، پایتون تابع دیگری را ارائه می دهد – os.makedirs
. این تابع تمام دایرکتوری های سطح متوسط مورد نیاز برای ایجاد دایرکتوری نهایی را ایجاد می کند. در اینجا روش استفاده از آن آورده شده است:
import os
os.makedirs('parent_dir/my_dir')
در این صورت حتی اگر parent_dir
وجود ندارد، os.makedirs
آن را به همراه ایجاد خواهد کرد my_dir
. اگر parent_dir
درحال حاضر وجود دارد، os.makedirs
به سادگی ایجاد خواهد کرد my_dir
درون آن
توجه داشته باشید: پسندیدن os.mkdir
، os.makedirs
الف را نیز بالا خواهد برد FileExistsError
اگر دایرکتوری نهایی که می خواهید ایجاد کنید از قبل وجود داشته باشد. با این حال، اگر دایرکتوری های میانی از قبل وجود داشته باشند، خطایی ایجاد نمی کند.
استفاده کردن pathlib برای ایجاد دایرکتوری ها
این pathlib
ماژول در پایتون 3.4 و بالاتر یک رویکرد شی گرا برای مدیریت مسیرهای سیستم فایل ارائه می دهد. خواندن آن شهودی تر و راحت تر از استفاده است os.mkdir
یا os.makedirs
. برای ایجاد دایرکتوری جدید با pathlib
، می توانید از Path.mkdir()
روش.
به عنوان مثال:
from pathlib import Path
path = Path('/path/to/directory')
path.mkdir(parents=True, exist_ok=True)
در این کد، parents=True
آرگومان به پایتون می گوید که هر دایرکتوری والد ضروری را ایجاد کند، و exist_ok=True
در صورتی که دایرکتوری از قبل وجود داشته باشد، عملیات بدون ایجاد استثنا ادامه میدهد.
رسیدگی به استثناها هنگام ایجاد دایرکتوری ها
هنگام کار با فایل سیستم، همیشه ایده خوبی است که استثنائات را مدیریت کنید. این ممکن است به دلیل مجوزها، دایرکتوری موجود یا تعدادی از مشکلات پیش بینی نشده دیگر باشد. در اینجا یک راه برای رسیدگی به استثناها هنگام ایجاد دایرکتوری ها وجود دارد:
from pathlib import Path
path = Path('/path/to/directory')
try:
path.mkdir(parents=True, exist_ok=False)
except FileExistsError:
print("Directory already exists.")
except PermissionError:
print("You don't have permissions to create this directory.")
except Exception as e:
print(f"An error occurred: {e}")
در این کد، ما تنظیم کرده ایم exist_ok=False
بالا بردن a FileExistsError
اگر دایرکتوری از قبل وجود داشته باشد. سپس این استثنا را همراه با PermissionError
و هر استثنای دیگر، و یک پیام مربوطه را چاپ کنید. این به ما کنترل دقیق تری بر روی کاری که در زمان بروز موقعیت های خاص انجام می دهیم، می دهد، اگرچه کمتر مختصر است و به خوانایی آسیب می رساند.
چه موقع باید استفاده کرد سیستم عامل یا pathlib برای ایجاد دایرکتوری ها
انتخاب بین os
و pathlib
برای ایجاد دایرکتوری ها تا حد زیادی بستگی دارد روی مورد استفاده خاص و ترجیح شخصی شما.
این os
ماژول مدتی است که وجود داشته است و به طور گسترده برای تعامل با سیستم عامل استفاده می شود. اگر با نسخه های قدیمی پایتون کار می کنید یا اگر نیاز به استفاده از نسخه های دیگر دارید، انتخاب خوبی است os
توابع در کد شما
از سوی دیگر، pathlib
یک ماژول جدیدتر است که رویکردی بصری تر و شی گرا برای مدیریت مسیرهای سیستم فایل ارائه می دهد. اگر از پایتون 3.4 یا بالاتر استفاده می کنید و سینتکس مدرن و خوانا را ترجیح می دهید، انتخاب خوبی است.
خوشبختانه هر دو os
و pathlib
بخشی از کتابخانه استاندارد پایتون هستند، بنابراین برای استفاده از آنها نیازی به نصب بسته های اضافی ندارید.
نتیجه
در این بایت، روش ایجاد دایرکتوری ها و مدیریت استثناها با استفاده از آن را بررسی کرده ایم os
و pathlib
ماژول ها در پایتون به یاد داشته باشید که انتخاب بین این دو گزینه بستگی دارد روی نیازهای خاص و ترجیحات شخصی شما همیشه هنگام کار با سیستم های فایل، برای قوی تر و قابل اعتمادتر کردن کد خود، از استثنائات استفاده کنید. این مهم است زیرا هنگام کار با فایلسیستمها به راحتی میتوان اشتباه کرد و در نهایت با خطا مواجه شد.
(برچسبها به ترجمه)# python
منتشر شده در 1402-12-29 11:41:04