از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
مقدمه ای بر ماژول Python Pathlib
سرفصلهای مطلب
ماژول 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 که مسیر را با زنجیرهبندی متدها و ویژگیها نشان میدهد. اضافه بار هوشمندانه از /
اپراتور کد را قابل خواندن و نگهداری آسان می کند.
یکی دیگر از مزایای روش ارائه شده توسط ماژول 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