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

سرور مجازی NVMe

مقدمه ای بر ماژول Python Pathlib

0 88
زمان لازم برای مطالعه: 7 دقیقه


ماژول Pathlib در پایتون راه کار با فایل ها و پوشه ها را ساده می کند. ماژول Pathlib از پایتون 3.4 و نسخه های بالاتر در دسترس است. بهترین ماژول های سیستم فایل پایتون را ترکیب می کند سیستم عامل، مسیر os، کره، و غیره.

در پایتون، بیشتر اسکریپت ها شامل تعامل با سیستم های فایل هستند. از این رو، پرداختن به نام فایل ها و مسیرها بسیار مهم است. برای رسیدن به این هدف، پایتون شامل ماژول Pathlib است که حاوی توابع مفیدی برای انجام وظایف مرتبط با فایل است. Pathlib با نشان دادن مسیرهای سیستم فایل به عنوان اشیاء مناسب، راه خواناتر و آسان‌تری برای ایجاد مسیرها فراهم می‌کند و ما را قادر می‌سازد تا کدی را بنویسیم که قابل حمل در پلتفرم‌ها باشد.

در این مقاله ماژول Pathlib را با کمک مثال های مختلف به طور مفصل بررسی می کنیم.

مفهوم مسیر و راهنما

قبل از حرکت بیشتر به جزئیات ماژول Pathlib، مهم است که دو مفهوم مختلف یعنی مسیر و فهرست را درک کنید.

مسیر برای شناسایی یک فایل استفاده می شود. مسیر یک دنباله اختیاری از نام‌های دایرکتوری را ارائه می‌کند که با نام فایل نهایی از جمله پسوند نام فایل خاتمه می‌یابند. پسوند نام فایل اطلاعاتی در مورد قالب/محتوای فایل ارائه می دهد. ماژول Pathlib می تواند با مسیرهای مطلق و همچنین نسبی سروکار داشته باشد. یک مسیر مطلق از آن شروع می شود root دایرکتوری و درخت دایرکتوری کامل را مشخص می کند، در حالی که یک مسیر نسبی، همانطور که از نام آن پیداست، مسیر یک فایل نسبت به فایل یا دایرکتوری دیگر (معمولا دایرکتوری فعلی) است.

دایرکتوری نشان دهنده ورودی سیستم فایل مسیر است و شامل نام فایل، زمان ایجاد، اندازه، مالک و غیره است.

ماژول Pathlib در پایتون با وظایف مرتبط با مسیر، مانند ساخت مسیرهای جدید از نام فایل ها و از مسیرهای دیگر، بررسی ویژگی های مختلف مسیرها و ایجاد فایل ها و پوشه ها در مسیرهای خاص، سروکار دارد.

چگونه از ماژول Pathlib استفاده کنیم؟

برای استفاده از pathlib ماژول به راحتی در اسکریپت های ما، ما import تمام کلاس های موجود در آن با استفاده از:

from pathlib import *

به عنوان اولین کار، بیایید با استفاده از کد زیر، اشیاء دایرکتوری کاری فعلی و دایرکتوری خانه را به ترتیب بازیابی کنیم:

current_dir = Path.cwd()
home_dir = Path.home()
print(current_dir)
print(home_dir)

ما می توانیم انتخاب کنیم import pathlib به جای وارد کردن همه کلاس ها. در آن صورت، تمام استفاده‌های بعدی کلاس‌ها در ماژول باید با پیشوند اضافه شوند pathlib.

import pathlib

current_dir = pathlib.Path.cwd()
home_dir = pathlib.Path.home()
print(current_dir)
print(home_dir)

چرا از pathlib مدول؟

اگر مدتی است که با زبان پایتون کار می‌کنید، از خود می‌پرسید که ضرورت آن چیست. pathlib زمانی که ماژول ها دوست دارند os، os.path، globو غیره در حال حاضر موجود هستند؟ این یک نگرانی کاملا موجه است. بیایید سعی کنیم از طریق یک مثال به این موضوع بپردازیم.

فرض کنید می خواهیم یک فایل به نام بسازیم output/output.xlsx در پوشه کاری فعلی کد زیر سعی می کند با استفاده از os.path مدول. برای این، os.getcwd و os.path.join توابع استفاده می شود.

import os
outpath = os.path.join(os.getcwd(), 'output')
outpath_file = os.path.join(outpath, 'out.xlsx')

متناوبا،

outpath_file = os.pathjoin(os.path.join(os.getcwd(), 'output'), "out.xlsx")

اگرچه کد کار می کند، اما به نظر می رسد درهم نیست و قابل خواندن و نگهداری نیست. تصور کنید اگر بخواهیم یک فایل جدید در داخل چندین دایرکتوری تودرتو ایجاد کنیم، این کد چگونه به نظر می رسد.

همان کد را می توان با استفاده از آن دوباره نوشت pathlib ماژول به شرح زیر

from pathlib import Path
outpath = Path.cwd() / 'output' / 'output.xlsx'

تجزیه ذهنی این قالب آسانتر است. در Pathlib، Path.cwd() تابع برای دریافت دایرکتوری کاری فعلی و / عملگر به جای استفاده می شود os.path.join برای ترکیب بخشی از مسیر به یک شی مسیر مرکب. الگوی تودرتوی تابع در os.path ماژول جایگزین می شود Path کلاس ماژول Pathlib که مسیر را با زنجیره‌بندی متدها و ویژگی‌ها نشان می‌دهد. اضافه بار هوشمندانه از / اپراتور کد را قابل خواندن و نگهداری آسان می کند.

پیشنهاد می‌کنیم بخوانید:  پیشوند 'b' در زبان پایتون String Literals

یکی دیگر از مزایای روش ارائه شده توسط ماژول Pathlib این است که a Path شی به جای ایجاد یک نمایش رشته ای از مسیر ایجاد می شود. این شی چندین روش مفید دارد که زندگی را آسان‌تر از کار با رشته‌های خامی است که مسیرها را نشان می‌دهند.

انجام عملیات روی راه ها

کلاسیک os.path ماژول فقط برای دستکاری رشته های مسیر استفاده می شود. برای انجام کاری با مسیر، به عنوان مثال، ایجاد یک دایرکتوری، به آن نیاز داریم os مدول. را os ماژول مجموعه ای از توابع را برای کار با فایل ها و دایرکتوری ها ارائه می دهد، مانند: mkdir برای ایجاد دایرکتوری، rename برای تغییر نام یک فهرست، getsize برای به دست آوردن اندازه یک فهرست و غیره روی.

اجازه دهید برخی از این عملیات را با استفاده از os ماژول و سپس همان کد را با استفاده از ماژول Pathlib بازنویسی کنید.

کد نمونه نوشته شده با استفاده از os مدول:

if os.path.isdir(path):
    os.rmdir(path)

اگر از ماژول های Pathlib استفاده کنیم path برای دستیابی به عملکرد یکسان، کد به دست آمده بسیار خواناتر و نگهداری آسان تر خواهد بود، همانطور که در زیر نشان داده شده است:

if path.is_dir()
    path.rmdir()

پیدا کردن ابزارهای مرتبط با مسیر در آن دشوار است os مدول. ماژول Pathlib مشکل را با جایگزینی ابزارهای کمکی حل می کند os ماژول با روش ها روی اشیاء مسیر اجازه دهید با یک کد آن را بهتر درک کنیم:

outpath = os.path.join(os.getcwd(), 'output')
outpath_tmp = os.path.join(os.getcwd(), 'output.tmp')
generate_data(output_tmp)

if os.path.getsize(output_tmp):
    os.rename(outpath_tmp, outpath)
else: 
    os.remove(outpath_tmp)

در اینجا، تابع generate_data() یک مسیر فایل را به عنوان پارامتر می گیرد و داده ها را در مسیر دیگری می نویسد. با این حال، اگر فایلی که به عنوان پارامتر ارسال می شود، تغییر نکرده باشد، از آخرین باری که generate_data() تابع اجرا شد، یک فایل خالی تولید می شود. در این صورت فایل خالی با نسخه قبلی فایل جایگزین می شود.

متغیر outpath داده ها را با پیوستن به فهرست کاری فعلی با نام فایل “output” ذخیره می کند. ما یک نسخه موقت نیز به نام as ایجاد می کنیم outpath.tmp. اگر اندازه نسخه موقت صفر نباشد، که به این معنی است که یک فایل خالی نیست، آنگاه نام نسخه موقت به تغییر داده می شود. outpath، در غیر این صورت نسخه موقت حذف شده و نسخه قدیمی حفظ می شود.

با استفاده از os ماژول، دستکاری مسیرهای سیستم فایل به عنوان اشیاء رشته ای ناشیانه می شود زیرا چندین تماس وجود دارد os.path.join()، os.getcwd()و غیره. برای جلوگیری از این مشکل، ماژول Pathlib مجموعه‌ای از کلاس‌ها را ارائه می‌دهد که می‌توانند برای عملیات‌های پرکاربرد استفاده شوند. روی مسیر، به روشی خواناتر، ساده تر، شی گرا.

بیایید سعی کنیم با استفاده از کد بالا را بازنویسی کنیم pathlib مدول.

from pathlib import Path

outpath = Path.cwd() / 'output'
outpath_tmp = Path.cwd() / 'output_tmp'

generate_data(output_tmp)

if outpath_tmp.stat().st_size:
    outpath_tmp.rename(outpath)
else: 
    Path_tmp.unlink()

با استفاده از Pathlib، os.getcwd() تبدیل می شود Path.cwd() و عملگر ‘/’ برای پیوستن به مسیرها استفاده می شود و به جای آن استفاده می شود os.path.join. با استفاده از pathlib ماژول، کارها را می توان به روشی ساده تر با استفاده از عملگرها و فراخوانی روش انجام داد.

روش های متداول و کاربرد آن به شرح زیر است:

  • Path.cwd(): شی مسیر بازگشتی که نشان دهنده دایرکتوری فعلی است
  • Path.home(): شی مسیر بازگشتی که دایرکتوری اصلی را نشان می دهد
  • Path.stat(): اطلاعات مسیر را برگردانید
  • Path.chmod(): تغییر حالت فایل و مجوزها
  • Path.glob(pattern): الگوی داده شده در دایرکتوری را که توسط مسیر نشان داده شده است را به شکل گلوب درآورید و فایل های منطبق از هر نوع را به دست می دهد.
  • Path.mkdir(): برای ایجاد یک دایرکتوری جدید در مسیر داده شده
  • Path.open(): برای باز کردن فایل ایجاد شده توسط مسیر
  • Path.rename(): یک فایل یا دایرکتوری را به هدف داده شده تغییر نام دهید
  • Path.rmdir(): پوشه خالی را حذف کنید
  • Path.unlink(): فایل یا پیوند نمادین را حذف کنید

ایجاد مسیرهای چند پلتفرمی

مسیرها از قراردادهای مختلفی در سیستم عامل های مختلف استفاده می کنند. ویندوز از اسلش معکوس بین نام پوشه ها استفاده می کند، در حالی که سایر سیستم عامل های محبوب از اسلش جلو بین نام پوشه ها استفاده می کنند. اگر شما می خواهید خود را python کد برای کار کردن، صرف نظر از سیستم‌عامل زیربنایی، باید قراردادهای مختلف خاص پلتفرم زیربنایی را مدیریت کنید. ماژول Pathlib کار با مسیرهای فایل را آسان تر می کند. در Pathlib، شما فقط می توانید یک مسیر یا نام فایل را به آن ارسال کنید Path() شیء با استفاده از اسلش رو به جلو، صرف نظر از سیستم عامل. Pathlib بقیه را اداره می کند.

pathlib.Path.home() / 'python' / 'samples' / 'test_me.py'

را Path() شی تبدیل خواهد کرد / برای سیستم عامل زیربنایی به نوع مناسب اسلش. را pathlib.Path ممکن است مسیر ویندوز یا پوزیکس را نشان دهد. بنابراین، Pathlib بسیاری از اشکالات چندکاره ای را با مدیریت آسان مسیرها حل می کند.

پیشنهاد می‌کنیم بخوانید:  دکوراتورها در پایتون چیست؟ با مثال کد توضیح داده شده است

دریافت اطلاعات مسیر

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

  • drive: رشته ای که نام درایو را نشان می دهد. مثلا، PureWindowsPath('c:/Program Files/CSV').drive “C:” را برمی گرداند
  • parts: یک تاپل را برمی گرداند که دسترسی به اجزای مسیر را فراهم می کند
  • name: جزء مسیر بدون هیچ دایرکتوری
  • parent: توالی دسترسی به اجداد منطقی مسیر
  • stem: جزء نهایی مسیر بدون پسوند آن
  • suffix: پسوند فایل کامپوننت نهایی
  • anchor: بخشی از یک مسیر قبل از دایرکتوری. / برای ایجاد مسیرهای فرزند و تقلید از رفتار استفاده می شود os.path.join.
  • joinpath: مسیر را با آرگومان های ارائه شده ترکیب می کند
  • match(pattern): True/False، بر اساس را برمی گرداند روی تطبیق مسیر با الگوی glob-style ارائه شده

در مسیر /home/projects/rasanegar/python/sample.md:

  • path: – PosixPath(‘/home/projects/rasanegar/ را برمی گرداندpython/sample.md’)
  • path.parts: – برمی گرداند (‘/’, ‘home’, ‘projects’, ‘rasanegar’, ‘python’)
  • path.name: – “sample.md” را برمی گرداند
  • path.stem: – «نمونه» را برمی گرداند
  • path.suffix: – “.md” را برمی گرداند
  • path.parent: – PosixPath(‘/home/projects/rasanegar/ را برمی گرداندpython’)
  • path.parent.parent: – PosixPath را برمی گرداند (‘/home/projects/rasanegar’)
  • path.match('*.md'): True را برمی گرداند
  • PurePosixPath('/python').joinpath('edited_version'): برمی گرداند (‘home/projects/rasanegar/python/edited_version

جایگزین ماژول Glob

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

from glob import glob

top_xlsx_files = glob('*.xlsx')
all_xlsx_files = glob('**/*.xlsx', recursive=True)

را pathlib خدمات glob را نیز ارائه می دهد:

from pathlib import Path

top_xlsx_files = Path.cwd().glob('*.xlsx')
all_xlsx_files = Path.cwd().rglob('*.xlsx')

عملکرد glob با در دسترس است Path اشیاء. بدین ترتیب، pathlib ماژول ها کارهای پیچیده را ساده تر می کنند.

خواندن و نوشتن فایل ها با استفاده از pathlib

روش های زیر برای انجام عملیات اساسی مانند خواندن و نوشتن فایل ها استفاده می شود:

  • read_text: فایل در حالت متن باز می شود تا محتویات فایل خوانده شود و پس از خواندن بسته شود
  • read_bytes: برای باز کردن فایل در حالت باینری و برگرداندن محتویات به صورت باینری استفاده می شود و پس از آن فایل را می بندد.
  • write_text: برای باز کردن فایل و نوشتن متن استفاده می شود و بعداً آن را می بندد
  • write_bytes: برای نوشتن داده های باینری در یک فایل استفاده می شود و پس از اتمام، فایل را می بندد

بیایید استفاده از ماژول Pathlib را برای عملیات رایج فایل بررسی کنیم. مثال زیر برای خواندن محتویات یک فایل استفاده می شود:

path = pathlib.Path.cwd() / 'Pathlib.md'
path.read_text()

اینجا، read_text روش روی را Path شی برای خواندن محتویات فایل استفاده می شود.
مثال زیر برای نوشتن داده ها در یک فایل، در حالت متنی استفاده می شود:

from pathlib import Path

p = Path('sample_text_file') p.write_text('Sample to write data to a file')

بنابراین، در pathlib ماژول، داشتن مسیر به عنوان یک شی، ما را قادر می سازد تا اقدامات مفیدی را انجام دهیم روی اشیاء برای سیستم فایل شامل دستکاری مسیرهای زیادی مانند ایجاد یا حذف دایرکتوری ها، جستجوی فایل های خاص، انتقال فایل ها و غیره.

نتیجه

برای نتیجه گیری، ماژول Pathlib تعداد زیادی ویژگی غنی و مفید را ارائه می دهد که می توان از آنها برای انجام انواع عملیات مرتبط با مسیر استفاده کرد. به عنوان یک مزیت اضافی، کتابخانه در سراسر سیستم عامل اصلی سازگار است.

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



منتشر شده در 1403-01-24 15:06:05

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

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

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