وبلاگ رسانگار
با ما حرفه ای باشید

سرور مجازی NVMe

پایتون: بررسی کنید که آیا یک فایل یا دایرکتوری وجود دارد یا خیر

0 2
زمان لازم برای مطالعه: 3 دقیقه


راه های زیادی برای حل یک مشکل در برنامه نویسی وجود دارد و این امر به ویژه در پایتون صادق است. بسیاری از اوقات متوجه خواهید شد که چندین ماژول داخلی یا استاندارد اساساً هدف یکسانی دارند، اما با عملکردهای کمی متفاوت. بررسی وجود فایل یا دایرکتوری با استفاده از پایتون قطعا یکی از این موارد است.

در اینجا چند راه برای بررسی فایل ها/دایرکتوری های موجود و تفاوت های ظریف آنها وجود دارد. در طول این مثال ها ما فرض می کنیم فهرست کار فعلی این فایل ها و دایرکتوری ها را در خود دارد:

drwxr-xr-x  3 scott  staff  102 Jan 12 10:01 dir
-rw-r--r--  1 scott  staff    5 Jan 12 09:56 file.txt
lrwxr-xr-x  1 scott  staff    8 Jan 12 09:56 link.txt -> file.txt
lrwxr-xr-x  1 scott  staff    3 Jan 12 10:00 sym -> dir

توجه داشته باشید که ما یک دایرکتوری داریم (dir)، یک فایل (file.txt)، پیوند نمادین یک فایل (link.txt، و یک پیوند نمادین دایرکتوری (sym).

بررسی وجود فایل

این بدون شک ساده ترین راه برای بررسی وجود هر دو فایل است و اگر فایل باشد

import os
os.path.isfile('./file.txt')    
os.path.isfile('./link.txt')    
os.path.isfile('./fake.txt')    
os.path.isfile('./dir')    
os.path.isfile('./sym')    
os.path.isfile('./foo')    

توجه داشته باشید که os.path.isfile میکند پیوندهای نمادین را دنبال کنید، بنابراین دریافت می کنیم True هنگام بررسی link.txt.

isfile در واقع فقط یک روش کمکی است که در داخل از آن استفاده می کند os.stat و stat.S_ISREG(mode) در زیر، که ما آن را لمس می کنیم روی بعد.

بررسی وجود دایرکتوری

مانند isfile روش، os.path.isdir ساده ترین راه برای بررسی اینکه آیا یک دایرکتوری وجود دارد یا اینکه آیا مسیر داده شده یک دایرکتوری است، است.

import os
os.path.isdir('./file.txt')    
os.path.isdir('./link.txt')    
os.path.isdir('./fake.txt')    
os.path.isdir('./dir')    
os.path.isdir('./sym')    
os.path.isdir('./foo')    

باز هم درست مثل isfile، os.path.isdir پیوندهای نمادین را دنبال می کند. همچنین فقط یک بسته بندی ساده در اطراف است os.stat و stat.S_ISDIR(mode)، بنابراین شما چیزی بیش از راحتی از آن دریافت نمی کنید.

بررسی اینکه آیا وجود دارد یا خیر

راه دیگر برای بررسی وجود یک مسیر (تا زمانی که برایتان مهم نباشد که آیا مسیر به یک فایل یا دایرکتوری اشاره دارد) استفاده از آن است. os.path.exists.

import os
os.path.exists('./file.txt')    
os.path.exists('./link.txt')    
os.path.exists('./fake.txt')    
os.path.exists('./dir')    
os.path.exists('./sym')    
os.path.exists('./foo')    

همانطور که می بینید، اهمیتی ندارد که مسیر به یک فایل، دایرکتوری یا پیوند نمادین اشاره می کند، بنابراین تقریباً مانند این است که شما از آن استفاده می کنید. isfile(path) or isdir(path). اما در واقع، در داخل فقط در تلاش برای تماس است os.stat(path)، و اگر خطایی ایجاد شود، برمی گردد False.

پیشرفته

در طول مقاله من به روش استفاده از تمام روش های بالا اشاره کرده ام os.stat روش، بنابراین من فکر کردم مفید است که به آن نگاهی بیندازیم. این یک روش سطح پایین تر است که اطلاعات دقیقی در مورد فایل ها، دایرکتوری ها، سوکت ها، بافرها و موارد دیگر در اختیار شما قرار می دهد.

مانند تمام روش های دیگری که قبلاً پوشش داده ایم، os.stat پیوندهای نمادین را دنبال می کند، بنابراین اگر می خواهید اطلاعات آماری را دریافت کنید روی یک لینک، سعی کنید استفاده کنید os.lstat() بجای.

از آنجایی که هر سیستم عامل متفاوت است، داده های ارائه شده توسط os.stat بسیار متفاوت است. در اینجا فقط برخی از داده های مشترک هر سیستم عامل آورده شده است:

  • st_mode: بیت های حفاظتی
  • st_uid: شناسه کاربری مالک
  • st_gid: شناسه گروه مالک
  • st_size: اندازه فایل بر حسب بایت
  • st_atime: زمان آخرین دسترسی
  • st_mtime: زمان آخرین اصلاح
  • st_ctime: زمان آخرین تغییر ابرداده روی یونیکس یا زمان خلقت روی پنجره ها

سپس می توانید از این داده ها با استفاده از stat ماژول برای دریافت اطلاعات جالب، مانند اینکه آیا یک مسیر به یک سوکت اشاره می کند (stat.S_ISSOCK(mode)، یا اگر یک فایل در واقع یک لوله با نام باشد (stat.S_ISFIFO(mode)).

اگر به عملکردهای پیشرفته تری نیاز دارید، این جایی است که باید بروید. اما در 90 درصد مواقع با دایرکتوری ها و فایل ها سر و کار دارید os یا os.path ماژول ها باید شما را تحت پوشش قرار دهند.

اگرچه، یک مورد استفاده معتبر ممکن است زمانی باشد که در حال انجام چندین آزمایش هستید روی همان فایل و می خواهید برای جلوگیری از سربار از تماس سیستم آماری برای هر آزمون بنابراین اگر چند آزمایش برای انجام دادن دارید، این به شما کمک می‌کند آن را با کارایی بیشتری انجام دهید.

(برچسب‌ها به ترجمه)# python



منتشر شده در 1403-01-30 08:48:25

امتیاز شما به این مطلب
دیدگاه شما در خصوص مطلب چیست ؟

آدرس ایمیل شما منتشر نخواهد شد.

لطفا دیدگاه خود را با احترام به دیدگاه های دیگران و با توجه به محتوای مطلب درج کنید