os.path --- دستکاری‌های رایج مسیر

کد منبع: Lib/genericpath.py، Lib/posixpath.py (برای POSIX) و Lib/ntpath.py (برای ویندوز).


این ماژول چند تابع مفید برای نام مسیرها پیاده‌سازی می‌کند. برای خواندن یا نوشتن پرونده‌ها open() را ببینید، و برای دسترسی به سامانه فایل‌بندی، ماژول os را ببینید. می‌توان پارامترهای مسیر را به‌صورت رشته، بایت، یا هر شیءای که پروتکل os.PathLike را پیاده‌سازی می‌کند، ارسال کرد.

برخلاف پوسته‌ی Unix، پایتون هیچ‌گونه بسط مسیری را به‌صورت خودکار انجام نمی‌دهد. توابعی مانند expanduser() و expandvars() را می‌توان به‌صورت صریح فراخوانی کرد، هنگامی که برنامه‌ای بسط مسیر شبیه به پوسته را بخواهد. (ماژول glob را نیز ببینید.)

همچنین ملاحظه نمائید

ماژول pathlib اشیای مسیر سطح بالا را ارائه می‌دهد.

توجه

همه‌ی این توابع، فقط اشیاء bytes یا فقط اشیاء رشته را به‌عنوان پارامترهای خود می‌پذیرند. اگر مسیر یا نام پرونده برگردانده شود، نتیجه یک شیء از همان نوع خواهد بود.

توجه

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

  • posixpath برای مسیرهای به‌سبک یونیکس

  • ntpath برای مسیرهای ویندوز

تغییر یافته در نسخه‌ی 3.8: exists()، lexists()، isdir()، isfile()، islink() و ismount() اکنون برای مسیرهایی که شامل نویسه‌ها یا بایت‌هایی غیرقابل‌بازنمایی در سطح سیستم‌عامل هستند، به‌جای پرتاب استثنا False را برمی‌گردانند.

os.path.abspath(path)

نسخه‌ی نرمال‌شده و مطلق‌شده از مسیر path را برمی‌گرداند. در بیشتر سکوها، این معادل فراخوانی normpath(join(os.getcwd(), path)) است.

On Windows the path is normalized by the operating system, therefore the result can differ from normpath(join(os.getcwd(), path)). A drive-relative path is resolved against the current directory of the specified drive, and the drive letter is capitalized. Trailing dots and spaces are stripped. For example:

>>> os.path.abspath('c:spam')
'C:\\Temp\\spam'
>>> os.path.abspath('c:/temp/spam. . .')
'c:\\temp\\spam'

همچنین ملاحظه نمائید

os.path.join() و os.path.normpath().

تغییر یافته در نسخه‌ی 3.6: یک path-like object را می‌پذیرد.

os.path.basename(path, /)

نام پایه‌ی مسیر path را برمی‌گرداند. این دومین عنصر از جفتی است که با فرستادن path به تابع split() برگردانده می‌شود. توجه داشته باشید که نتیجه‌ی این تابع با برنامه‌ی basename در یونیکس متفاوت است؛ در حالی که basename برای '/foo/bar/' مقدار 'bar' را برمی‌گرداند، تابع basename() یک رشته خالی ('') برمی‌گرداند.

تغییر یافته در نسخه‌ی 3.6: یک path-like object را می‌پذیرد.

os.path.commonpath(paths)

طولانی‌ترین زیرمسیر مشترک هر مسیر در پیمایش‌پذیر paths را برمی‌گرداند. اگر paths شامل مسیرهای مطلق و نسبی با هم باشد، اگر paths روی درایوهای مختلف باشد، یا اگر paths خالی باشد، ValueError را پرتاب می‌کند. برخلاف commonprefix()، این تابع یک مسیر معتبر برمی‌گرداند.

اضافه شده در نسخه‌ی 3.5.

تغییر یافته در نسخه‌ی 3.6: دنباله‌ای از اشیاء شبه‌مسیر را می‌پذیرد.

تغییر یافته در نسخه‌ی 3.13: اکنون می‌توان هر پیمایش‌پذیری را ارسال کرد، نه فقط دنباله‌ها.

os.path.commonprefix(list, /)

بلندترین پیشوند رشته‌ای (که به‌صورت نویسه‌به‌نویسه گرفته می‌شود) را برمی‌گرداند که پیشوند تمام رشته‌های موجود در list باشد. اگر list خالی باشد، رشته‌ی خالی ('') را برمی‌گرداند.

هشدار

این تابع ممکن است مسیرهای نامعتبر برگرداند، زیرا به‌صورت نویسه‌به‌نویسه عمل می‌کند. اگر به پیشوند مشترک مسیر نیاز دارید، الگوریتم پیاده‌سازی‌شده در این تابع امن نیست. برای یافتن پیشوند مشترک مسیر از commonpath() استفاده کنید.

>>> os.path.commonprefix(['/usr/lib', '/usr/local/lib'])
'/usr/l'

>>> os.path.commonpath(['/usr/lib', '/usr/local/lib'])
'/usr'

تغییر یافته در نسخه‌ی 3.6: یک path-like object را می‌پذیرد.

os.path.dirname(path, /)

نام پوشه‌ی مسیر path را برمی‌گرداند. این نخستین عنصر از جفتی است که با فرستادن path به تابع split() برگردانده می‌شود.

تغییر یافته در نسخه‌ی 3.6: یک path-like object را می‌پذیرد.

os.path.exists(path)

اگر path به یک مسیر موجود یا یک توصیف‌گر پرونده باز اشاره کند، True را برمی‌گرداند. برای پیوندهای نمادین شکسته، False را برمی‌گرداند. در برخی سکوها، اگر اجازه اجرای os.stat() روی پرونده درخواستی داده نشود، این تابع ممکن است False را برگرداند، حتی اگر path وجود فیزیکی داشته باشد.

تغییر یافته در نسخه‌ی 3.3: path اکنون می‌تواند یک عدد صحیح باشد: اگر یک توصیف‌گر پرونده باز باشد، True برگردانده می‌شود، در غیر این صورت False.

تغییر یافته در نسخه‌ی 3.6: یک path-like object را می‌پذیرد.

os.path.lexists(path)

اگر path به یک مسیر موجود اشاره کند، از جمله پیوندهای نمادین شکسته، True را برمی‌گرداند. معادل exists() در سکوهای فاقد os.lstat() است.

تغییر یافته در نسخه‌ی 3.6: یک path-like object را می‌پذیرد.

os.path.expanduser(path)

در یونیکس و ویندوز، آرگومان را با جایگزینی کامپوننت ابتدایی ~ یا ~user با پوشه‌ی خانگی آن کاربر برمی‌گرداند.

در یونیکس، اگر متغیر محیطی HOME تنظیم شده باشد، ~ ابتدایی با آن جایگزین می‌شود؛ در غیر این صورت، پوشه‌ی خانه‌ی کاربر جاری از طریق ماژول توکار pwd در پوشه‌ی گذرواژه جستجو می‌شود. ~user ابتدایی مستقیماً در پوشه‌ی گذرواژه جستجو می‌شود.

در ویندوز، اگر USERPROFILE تنظیم شده باشد، از آن استفاده خواهد شد؛ در غیر این صورت، از ترکیبی از HOMEPATH و HOMEDRIVE استفاده خواهد شد. ~user ابتدایی با بررسی اینکه آخرین کامپوننت پوشه در پوشه‌ی خانه‌ی کاربر جاری با USERNAME مطابقت دارد و جایگزینی آن در صورت تطابق، مدیریت می‌شود.

اگر بسط ناموفق باشد یا مسیر با تیلدا آغاز نشود، مسیر بدون تغییر بازگردانده می‌شود.

تغییر یافته در نسخه‌ی 3.6: یک path-like object را می‌پذیرد.

تغییر یافته در نسخه‌ی 3.8: دیگر در ویندوز از HOME استفاده نمی‌کند.

os.path.expandvars(path)

آرگومان را پس از بسط متغیرهای محیطی برمی‌گرداند. زیررشته‌هایی به شکل $name یا ${name} با مقدار متغیر محیطی name جایگزین می‌شوند. نام‌های متغیر نامعتبر و ارجاع‌ها به متغیرهای غیرموجود بدون تغییر باقی می‌مانند.

در ویندوز، علاوه بر $name و ${name}، بسط‌های %name% نیز پشتیبانی می‌شوند.

تغییر یافته در نسخه‌ی 3.6: یک path-like object را می‌پذیرد.

os.path.getatime(path, /)

زمان آخرین دسترسی به path را برمی‌گرداند. مقدار بازگشتی یک عدد ممیز شناور است که تعداد ثانیه‌های سپری‌شده از مبدأ زمانی را نشان می‌دهد (ماژول time را ببینید). اگر پرونده وجود نداشته باشد یا دسترسی‌ناپذیر باشد، OSError را پرتاب می‌کند.

os.path.getmtime(path, /)

زمان آخرین تغییر path را برمی‌گرداند. مقدار بازگشتی یک عدد ممیز شناور است که تعداد ثانیه‌های سپری‌شده از مبدأ زمانی را نشان می‌دهد (ماژول time را ببینید). اگر پرونده وجود نداشته باشد یا دسترسی‌پذیر نباشد، OSError پرتاب می‌شود.

تغییر یافته در نسخه‌ی 3.6: یک path-like object را می‌پذیرد.

os.path.getctime(path, /)

ctime سیستم را برمی‌گرداند که در برخی سیستم‌ها (مانند Unix) زمان آخرین تغییر فراداده است و در برخی دیگر (مانند Windows)، زمان ایجاد برای path است. مقدار بازگشتی عددی است که تعداد ثانیه‌های سپری‌شده از مبدأ زمان را نشان می‌دهد (ماژول time را ببینید). اگر پرونده وجود نداشته باشد یا غیرقابل‌دسترسی باشد، OSError را پرتاب می‌کند.

تغییر یافته در نسخه‌ی 3.6: یک path-like object را می‌پذیرد.

os.path.getsize(path, /)

اندازه‌ی path را بر حسب بایت برمی‌گرداند. اگر پرونده وجود نداشته باشد یا در دسترس نباشد، OSError را پرتاب می‌کند.

تغییر یافته در نسخه‌ی 3.6: یک path-like object را می‌پذیرد.

os.path.isabs(path, /)

اگر path یک مسیر مطلق باشد، True برمی‌گرداند. در یونیکس، این یعنی با یک اسلش آغاز می‌شود؛ در ویندوز یعنی با دو اسلش یا دو بک‌اسلش، یا با حرف درایو، دونقطه و اسلش یا بک‌اسلش به‌همراه هم آغاز می‌شود.

همچنین ملاحظه نمائید

abspath()

تغییر یافته در نسخه‌ی 3.6: یک path-like object را می‌پذیرد.

تغییر یافته در نسخه‌ی 3.13: در ویندوز، اگر مسیر داده‌شده دقیقاً با یک (بک)اسلش آغاز شود، False برمی‌گرداند.

os.path.isfile(path)

اگر path یک پرونده معمولی موجود باشد، مقدار True برمی‌گرداند. این تابع پیوندهای نمادین را دنبال می‌کند، بنابراین هم islink() و هم isfile() می‌توانند برای یک مسیر یکسان درست باشند.

تغییر یافته در نسخه‌ی 3.6: یک path-like object را می‌پذیرد.

os.path.isdir(path, /)

اگر path یک پوشه‌ی موجود باشد، True برمی‌گرداند. این تابع از پیوندهای نمادین پیروی می‌کند، بنابراین هم islink() و هم isdir() می‌توانند برای یک مسیر یکسان درست باشند.

تغییر یافته در نسخه‌ی 3.6: یک path-like object را می‌پذیرد.

os.path.isjunction(path)

اگر path به یک ورودی پوشه‌ی existing اشاره کند که یک اتصال (junction) باشد، True را برمی‌گرداند. اگر اتصال‌ها (junctions) در پلتفرم فعلی پشتیبانی نشوند، همیشه False را برمی‌گرداند.

اضافه شده در نسخه‌ی 3.12.

اگر path به یک ورودی پوشه‌ی existing اشاره کند که یک پیوند نمادین باشد، True را برمی‌گرداند. اگر ران‌تایم پایتون از پیوندهای نمادین پشتیبانی نکند، همیشه False را برمی‌گرداند.

تغییر یافته در نسخه‌ی 3.6: یک path-like object را می‌پذیرد.

os.path.ismount(path)

اگر مسیر path یک نقطه اتصال <mount point> باشد، مقدار True را برمی‌گرداند: نقطه‌ای در یک سامانه فایل‌بندی که سامانه فایل‌بندی‌ای دیگر در آن سوار شده است. در POSIX، این تابع بررسی می‌کند که آیا والد path، یعنی path/..، روی دستگاهی متفاوت از path قرار دارد، یا اینکه path/.. و path به یک i-node روی همان دستگاه اشاره می‌کنند --- این باید نقاط اتصال را برای تمام انواع Unix و POSIX تشخیص دهد. این تابع نمی‌تواند اتصال‌های مقید‌سازی (bind mounts) را روی همان سامانه فایل‌بندی به‌طور قابل‌اطمینان تشخیص دهد. در سیستم‌های لینوکس، این تابع همیشه برای زیرحجم‌های btrfs مقدار True را برمی‌گرداند، حتی اگر نقاط اتصال نباشند. در ویندوز، ریشه‌ی حرف درایو و UNC اشتراکی همیشه نقاط اتصال هستند، و برای هر مسیر دیگر GetVolumePathName فراخوانی می‌شود تا بررسی شود که آیا با مسیر ورودی متفاوت است یا خیر.

تغییر یافته در نسخه‌ی 3.4: پشتیبانی برای تشخیص نقاط اتصال غیرریشه در ویندوز افزوده شد.

تغییر یافته در نسخه‌ی 3.6: یک path-like object را می‌پذیرد.

os.path.isdevdrive(path)

اگر مسیر path روی یک درایو توسعه‌ی ویندوز (Windows Dev Drive) قرار داشته باشد، True را برمی‌گرداند. درایو توسعه برای سناریوهای توسعه‌دهندگان بهینه‌سازی شده است و عملکرد سریع‌تری برای خواندن و نوشتن پرونده‌ها ارائه می‌دهد. توصیه می‌شود از آن برای کد منبع، پوشه‌های ساخت موقت، نهانگاه‌های بسته و سایر عملیات‌های فشرده‌ی IO استفاده شود.

ممکن است برای یک مسیر نامعتبر خطایی پرتاب کند، برای مثال مسیری که درایو قابل‌تشخیصی ندارد، اما در پلتفرم‌هایی که از درایوهای توسعه (Dev Drives) پشتیبانی نمی‌کنند، False را برمی‌گرداند. برای اطلاعات درباره فعال‌سازی و ایجاد درایوهای توسعه (Dev Drives)، مستندات ویندوز را ببینید.

اضافه شده در نسخه‌ی 3.12.

تغییر یافته در نسخه‌ی 3.13: این تابع اکنون در تمام پلتفرم‌ها در دسترس است و در پلتفرم‌هایی که از Dev Drives پشتیبانی نمی‌کنند، همیشه False را برمی‌گرداند

os.path.isreserved(path)

اگر path یک مسیر رزروشده در سیستم فعلی باشد، True را برمی‌گرداند.

در ویندوز، نام‌های پرونده رزروشده شامل مواردی می‌شوند که با فاصله یا نقطه پایان می‌یابند؛ مواردی که شامل دونقطه (یعنی جریان‌های پرونده مانند "name:stream")، وایلدکارد (یعنی '*?"<>')، پایپ یا نویسه‌های کنترلی ASCII هستند؛ و همچنین نام‌های دستگاه DOS مانند "NUL"، "CON"، "CONIN$"، "CONOUT$"، "AUX"، "PRN"، "COM1" و "LPT1".

توجه

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

اضافه شده در نسخه‌ی 3.13.

os.path.join(path, /, *paths)

یک یا چند بخش مسیر را به‌صورت هوشمندانه به هم می‌پیوندد. مقدار بازگشتی، حاصل الحاق path و همه‌ی اعضای *paths است؛ به‌طوری‌که پس از هر بخش غیرخالی، به جز آخرین بخش، دقیقاً یک جداکننده‌ی پوشه قرار می‌گیرد. یعنی نتیجه تنها در صورتی با یک جداکننده پایان می‌یابد که آخرین بخش یا خالی باشد یا با یک جداکننده پایان یابد.

اگر یک بخش مسیر مطلق باشد (که در ویندوز به هر دو درایو و ریشه نیاز دارد)، تمام بخش‌های پیشین نادیده گرفته می‌شوند و اتصال از بخش مسیر مطلق ادامه می‌یابد. برای مثال، در لینوکس:

>>> os.path.join('/home/foo', 'bar')
'/home/foo/bar'
>>> os.path.join('/home/foo', '/home/bar')
'/home/bar'

در ویندوز، هنگام مواجهه با یک بخش مسیر ریشه‌دار (مثلاً r'\foo')، درایو بازنشانی نمی‌شود. اگر یک بخش مسیر روی درایو دیگری باشد یا یک مسیر مطلق باشد، تمام بخش‌های پیشین نادیده گرفته می‌شوند و درایو بازنشانی می‌شود. برای مثال:

>>> os.path.join('c:\\', 'foo')
'c:\\foo'
>>> os.path.join('c:\\foo', 'd:\\bar')
'd:\\bar'

توجه داشته باشید که چون برای هر درایو یک پوشه جاری وجود دارد، os.path.join("c:", "foo") مسیری نسبی به پوشه جاری در درایو C: را نشان می‌دهد (c:foo)، نه c:\foo.

تغییر یافته در نسخه‌ی 3.6: یک شیء شبه‌مسیر را برای path و paths می‌پذیرد.

os.path.normcase(path, /)

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

تغییر یافته در نسخه‌ی 3.6: یک path-like object را می‌پذیرد.

os.path.normpath(path)

با حذف جداکننده‌های اضافی و ارجاع‌های سطح بالاتر، مسیرنام را هنجار کنید، به‌طوری که A//B، A/B/، A/./B و A/foo/../B همگی به A/B تبدیل شوند. این دست‌کاری رشته ممکن است معنای مسیری را که شامل پیوندهای نمادین است تغییر دهد. در ویندوز، اسلش‌های رو به جلو را به اسلش‌های رو به عقب تبدیل می‌کند. برای هنجارسازی بزرگی و کوچکی حروف، از normcase() استفاده کنید.

توجه

در سیستم‌های POSIX، مطابق با IEEE Std 1003.1 2013 Edition; 4.13 Pathname Resolution، اگر یک مسیرنام دقیقاً با دو اسلش آغاز شود، اولین کامپوننت پس از نویسه‌های پیشرو ممکن است به‌صورت تعریف‌شده توسط پیاده‌سازی تفسیر شود، اگرچه بیش از دو نویسه‌ی پیشرو باید به‌عنوان یک نویسه‌ی واحد در نظر گرفته شود.

تغییر یافته در نسخه‌ی 3.6: یک path-like object را می‌پذیرد.

os.path.realpath(path, /, *, strict=False)

Return the canonical path of the specified filename, eliminating any symbolic links encountered in the path (if they are supported by the operating system). On Windows, this function will also resolve MS-DOS (also called 8.3) style names such as C:\\PROGRA~1 to C:\\Program Files. The returned path uses the case reported by the operating system, which can differ from the case of path, in particular the drive letter is capitalized.

به‌طور پیش‌فرض، مسیر تا نخستین کامپوننتی که وجود ندارد، یک حلقه‌ی پیوند نمادین است، یا ارزیابی آن باعث پرتاب OSError می‌شود، ارزیابی می‌شود. همه‌ی چنین کامپوننت‌هایی بدون تغییر به بخش موجود مسیر افزوده می‌شوند.

برخی از خطاهایی که به این روش مدیریت می‌شوند، شامل «دسترسی رد شد»، «پوشه نیست» یا «آرگومان نامعتبر برای تابع داخلی» هستند. بنابراین، مسیر حاصل ممکن است مفقود یا دسترسی‌ناپذیر باشد، ممکن است همچنان شامل پیوندها یا حلقه‌ها باشد، و ممکن است از اجزایی که پوشه نیستند عبور کند.

این رفتار را می‌توان با آرگومان‌های کلیدواژه‌ای تغییر داد:

اگر strict برابر True باشد، اولین خطای مواجه‌شده هنگام ارزیابی مسیر دوباره پرتاب می‌شود. به‌ویژه، اگر path وجود نداشته باشد، FileNotFoundError پرتاب می‌شود، یا اگر به دلایل دیگر در دسترس نباشد، یک OSError دیگر پرتاب می‌شود.

اگر strict برابر با os.path.ALLOW_MISSING باشد، خطاهایی غیر از FileNotFoundError دوباره پرتاب می‌شوند (مانند strict=True). بنابراین، مسیر بازگردانده‌شده شامل هیچ پیوند نمادینی نخواهد بود، اما ممکن است پرونده نام‌برده و برخی از پوشه‌های والد آن موجود نباشند.

توجه

این تابع رویه‌ی سیستم‌عامل برای کانونیکال‌کردن یک مسیر را شبیه‌سازی می‌کند؛ این رویه در Windows و UNIX از نظر نحوه‌ی تعامل پیوندها و کامپوننت‌های بعدی مسیر کمی تفاوت دارد.

API های سیستم‌عامل در صورت نیاز مسیرها را به‌صورت کانونیکال درمی‌آورند، بنابراین معمولاً نیازی به فراخوانی این تابع نیست.

تغییر یافته در نسخه‌ی 3.6: یک path-like object را می‌پذیرد.

تغییر یافته در نسخه‌ی 3.8: پیوندهای نمادین و نقاط اتصال (junctions) اکنون در ویندوز حل می‌شوند.

تغییر یافته در نسخه‌ی 3.10: پارامتر strict افزوده شد.

تغییر یافته در نسخه‌ی 3.14: مقدار ALLOW_MISSING برای پارامتر strict افزوده شد.

os.path.ALLOW_MISSING

مقدار ویژه‌ای که برای آرگومان strict در realpath() استفاده می‌شود.

اضافه شده در نسخه‌ی 3.14.

os.path.relpath(path, start=os.curdir)

مسیر پرونده نسبی به path را از پوشه جاری یا از یک پوشه start اختیاری بازمی‌گرداند. این یک محاسبه‌ی مسیر است: برای تأیید وجود یا ماهیت path یا start به سامانه فایل‌بندی دسترسی پیدا نمی‌شود. در ویندوز، هنگامی که path و start روی درایوهای متفاوت باشند، ValueError پرتاب می‌شود.

مقدار پیش‌فرض start برابر os.curdir است.

تغییر یافته در نسخه‌ی 3.6: یک path-like object را می‌پذیرد.

os.path.samefile(path1, path2, /)

اگر هر دو آرگومان مسیرنام به یک پرونده یا پوشه‌ی یکسان اشاره کنند، True را برمی‌گرداند. این امر با شماره‌ی دستگاه و شماره‌ی i-node تعیین می‌شود و در صورتی که فراخوانی os.stat() روی هر یک از مسیرنام‌ها ناموفق باشد، یک استثنا پرتاب می‌شود.

تغییر یافته در نسخه‌ی 3.2: پشتیبانی از ویندوز افزوده شد.

تغییر یافته در نسخه‌ی 3.4: ویندوز اکنون از همان پیاده‌سازیِ تمامی پلتفرم‌های دیگر استفاده می‌کند.

تغییر یافته در نسخه‌ی 3.6: یک path-like object را می‌پذیرد.

os.path.sameopenfile(fp1, fp2)

اگر توصیف‌گرهای پرونده fp1 و fp2 به یک پرونده اشاره کنند، True را برمی‌گرداند.

تغییر یافته در نسخه‌ی 3.2: پشتیبانی از ویندوز افزوده شد.

تغییر یافته در نسخه‌ی 3.6: یک path-like object را می‌پذیرد.

os.path.samestat(stat1, stat2, /)

اگر تاپل‌های stat stat1 و stat2 به یک پرونده یکسان اشاره کنند، True را برمی‌گرداند. این ساختارها ممکن است توسط os.fstat()، os.lstat() یا os.stat() برگردانده شده باشند. این تابع، مقایسه‌ی زیربنایی‌ای را پیاده‌سازی می‌کند که توسط samefile() و sameopenfile() استفاده می‌شود.

تغییر یافته در نسخه‌ی 3.4: پشتیبانی از ویندوز افزوده شد.

os.path.split(path, /)

مسیر path را به یک جفت، (head, tail) تقسیم می‌کند، که در آن tail آخرین کامپوننت مسیر و head همه‌چیز پیش از آن است. بخش tail هرگز شامل اسلش نمی‌شود؛ اگر path به اسلش ختم شود، tail خالی خواهد بود. اگر هیچ اسلشی در path وجود نداشته باشد، head خالی خواهد بود. اگر path خالی باشد، هر دو head و tail خالی هستند. اسلش‌های پایانی از head حذف می‌شوند، مگر اینکه ریشه باشد (فقط یک یا چند اسلش). در همه‌ی حالات، join(head, tail) مسیری به همان مکان path برمی‌گرداند (اما ممکن است رشته‌ها متفاوت باشند). همچنین توابع join()، dirname() و basename() را ببینید.

تغییر یافته در نسخه‌ی 3.6: یک path-like object را می‌پذیرد.

os.path.splitdrive(path, /)

مسیر path را به یک جفت (drive, tail) تقسیم می‌کند که در آن drive یا یک نقطه‌ی اتصال است یا رشته‌ی خالی. در سیستم‌هایی که از مشخصات درایو استفاده نمی‌کنند، drive همیشه رشته‌ی خالی خواهد بود. در همه‌ی موارد، drive + tail همان path خواهد بود.

در ویندوز، یک مسیر را به درایو/نقطه اشتراک UNC و مسیر نسبی تقسیم می‌کند.

اگر مسیر شامل حرف درایو باشد، drive شامل همه‌چیز تا خود دونقطه خواهد بود:

>>> splitdrive("c:/dir")
("c:", "/dir")

اگر مسیر حاوی یک مسیر UNC باشد، درایو حاوی نام میزبان و اشتراک خواهد بود:

>>> splitdrive("//host/computer/dir")
("//host/computer", "/dir")

تغییر یافته در نسخه‌ی 3.6: یک path-like object را می‌پذیرد.

os.path.splitroot(path, /)

مسیر path را به یک تاپل ۳ آیتمی (drive, root, tail) تقسیم می‌کند که در آن drive نام دستگاه یا نقطه اتصال است، root رشته‌ای از جداکننده‌ها بعد از drive است، و tail همه‌چیز بعد از root است. هر یک از این آیتم‌ها ممکن است رشته خالی باشد. در تمام حالت‌ها، drive + root + tail با path یکسان خواهد بود.

در سیستم‌های POSIX، drive همیشه خالی است. root ممکن است خالی باشد (اگر path نسبی باشد)، یک اسلش رو به جلو باشد (اگر path مطلق باشد)، یا دو اسلش رو به جلو باشد (تعیین‌شده توسط پیاده‌سازی، طبق IEEE Std 1003.1-2017; 4.13 Pathname Resolution.) برای مثال:

>>> splitroot('/home/sam')
('', '/', 'home/sam')
>>> splitroot('//home/sam')
('', '//', 'home/sam')
>>> splitroot('///home/sam')
('', '/', '//home/sam')

در ویندوز، drive ممکن است خالی، نام حرف درایو، اشتراک UNC یا نام دستگاه باشد. root ممکن است خالی، اسلش رو به جلو یا اسلش رو به عقب باشد. برای مثال:

>>> splitroot('C:/Users/Sam')
('C:', '/', 'Users/Sam')
>>> splitroot('//Server/Share/Users/Sam')
('//Server/Share', '/', 'Users/Sam')

اضافه شده در نسخه‌ی 3.12.

os.path.splitext(path, /)

مسیر path را به یک جفت (root, ext) تقسیم می‌کند، به‌طوری که root + ext == path باشد و پسوند، ext، خالی باشد یا با یک نقطه آغاز شود و حداکثر یک نقطه داشته باشد.

اگر مسیر فاقد پسوند باشد، ext برابر '' خواهد بود:

>>> splitext('bar')
('bar', '')

اگر مسیر شامل یک پسوند باشد، آنگاه ext روی این پسوند، از جمله نقطه آغازین، تنظیم می‌شود. توجه داشته باشید که نقطه‌های پیشین نادیده گرفته می‌شوند:

>>> splitext('foo.bar.exe')
('foo.bar', '.exe')
>>> splitext('/foo/bar.exe')
('/foo/bar', '.exe')

نقطه‌های آغازین آخرین کامپوننت مسیر، بخشی از ریشه در نظر گرفته می‌شوند:

>>> splitext('.cshrc')
('.cshrc', '')
>>> splitext('/foo/....jpg')
('/foo/....jpg', '')

تغییر یافته در نسخه‌ی 3.6: یک path-like object را می‌پذیرد.

os.path.supports_unicode_filenames

True اگر بتوان از رشته‌های یونیکدی دلخواه به‌عنوان نام پرونده استفاده کرد (در چارچوب محدودیت‌های اعمال‌شده توسط سامانه فایل‌بندی).