الفرق بين المراجعتين لصفحة: «Python/pathlib/PurePath»
طلا ملخص تعديل |
|||
سطر 5: | سطر 5: | ||
#لمعالجة مسارات نظام ويندوز أثناء العمل على جهاز يعمل بنظام يونكس (والعكس بالعكس)، حيث لا يمكنك إنشاء كائن من الصنف <code>WindowsPath</code> عند العمل على نظام يونكس، ولكن يمكنك إنشاء كائن من الصنف <code>PureWindowsPath</code>. | #لمعالجة مسارات نظام ويندوز أثناء العمل على جهاز يعمل بنظام يونكس (والعكس بالعكس)، حيث لا يمكنك إنشاء كائن من الصنف <code>WindowsPath</code> عند العمل على نظام يونكس، ولكن يمكنك إنشاء كائن من الصنف <code>PureWindowsPath</code>. | ||
#عليك التأكد بأن الشيفرة البرمجية تعالج المسارات فقط دون الوصول الفعلي إلى نظام التشغيل، ففي هذه الحالة، يمكنك إنشاء كائن من أحد الأصناف النقية، فهي لا تملك عمليات تسمح لها بالوصول إلى نظام التشغيل. | #عليك التأكد بأن الشيفرة البرمجية تعالج المسارات فقط دون الوصول الفعلي إلى نظام التشغيل، ففي هذه الحالة، يمكنك إنشاء كائن من أحد الأصناف النقية، فهي لا تملك عمليات تسمح لها بالوصول إلى نظام التشغيل. | ||
يمكنك إنشاء كائنات من أيٍّ من الأصناف المذكورة آنفًا على أي نظام تشغيل، وذلك لأنها لا تقوم بأي استدعاءات من النظام. | يمكنك إنشاء كائنات من أيٍّ من الأصناف المذكورة آنفًا على أي نظام تشغيل، وذلك لأنها لا تقوم بأي استدعاءات من النظام. | ||
==الاستخدام الأساسي للصنف PurePath== | ==الاستخدام الأساسي للصنف PurePath== | ||
يمكن إنشاء كائنات من هذا الصنف لمعالجة المسارات بحيث لا يتم الوصول الفعلي إلى نظام الملفات. وتوجد ثلاث طرائق لإنشاء كائنات من هذا الصنف (تُسمّى الطرق بالنكهات) | يمكن إنشاء كائنات من هذا الصنف لمعالجة المسارات بحيث لا يتم الوصول الفعلي إلى نظام الملفات. وتوجد ثلاث طرائق لإنشاء كائنات من هذا الصنف (تُسمّى الطرق بالنكهات) | ||
سطر 15: | سطر 13: | ||
PurePosixPath('setup.py') | PurePosixPath('setup.py') | ||
</syntaxhighlight> | </syntaxhighlight>يمكن لكل عنصر من الوسيط pathsegments أن يكون سلسلة نصية تمثل قطعة مسار أو كائنًا ينفذ الواجهة os.PathLike التي تعيد سلسلة نصية، كما يمكن أن تكون كائن مسار آخر.<syntaxhighlight lang="python3"> | ||
يمكن لكل عنصر من الوسيط pathsegments أن يكون سلسلة نصية تمثل قطعة مسار أو كائنًا ينفذ الواجهة os.PathLike التي تعيد سلسلة نصية، كما يمكن أن تكون كائن مسار آخر.<syntaxhighlight lang="python3"> | |||
>>> PurePath('foo', 'some/path', 'bar') | >>> PurePath('foo', 'some/path', 'bar') | ||
PurePosixPath('foo/some/path/bar') | PurePosixPath('foo/some/path/bar') | ||
سطر 25: | سطر 21: | ||
</syntaxhighlight> | </syntaxhighlight>ويُفترض وجود المسار '.' عندما يكون الوسيط pathsegments خاليًا:<syntaxhighlight lang="python3"> | ||
ويُفترض وجود المسار '.' عندما يكون الوسيط pathsegments خاليًا:<syntaxhighlight lang="python3"> | |||
>>> PurePath() | >>> PurePath() | ||
PurePosixPath('.') | PurePosixPath('.') | ||
</syntaxhighlight> | </syntaxhighlight>عندما تُعطى عدة مسارات مطلقة، يُعتبر المسار الأخير على أنه مسار المبدأ(anchor) (بشكل مطابق لسلوك التابع os.path.join)<syntaxhighlight lang="python3"> | ||
عندما تُعطى عدة مسارات مطلقة، يُعتبر المسار الأخير على أنه مسار المبدأ(anchor) (بشكل مطابق لسلوك التابع os.path.join)<syntaxhighlight lang="python3"> | |||
>>> PurePath('/etc', '/usr', 'lib64') | >>> PurePath('/etc', '/usr', 'lib64') | ||
PurePosixPath('/usr/lib64') | PurePosixPath('/usr/lib64') | ||
سطر 40: | سطر 32: | ||
</syntaxhighlight> | </syntaxhighlight>عند العمل في مسارات ويندوز، فإن تغيير مجلد الجذر المحلي لا يؤدي إلى إهمال إعدادات القرص السابق<syntaxhighlight lang="python3"> | ||
عند العمل في مسارات ويندوز، فإن تغيير مجلد الجذر المحلي لا يؤدي إلى إهمال إعدادات القرص السابق<syntaxhighlight lang="python3"> | |||
>>> PureWindowsPath('c:/Windows', '/Program Files') | >>> PureWindowsPath('c:/Windows', '/Program Files') | ||
PureWindowsPath('c:/Program Files') | PureWindowsPath('c:/Program Files') | ||
</syntaxhighlight> | </syntaxhighlight>يُضمّ رمز الشرطة <code>'/'</code> المكرر وكذلك النقطة المفردة، إلا أنه لا يُتعامل بالمثل مع النقطتين المزدوجتين <code>'..'</code> وذلك لأن هذا قد يغير دلالة المسار في حال استخدام الروابط الرمزية:<syntaxhighlight lang="python3"> | ||
يُضمّ رمز الشرطة <code>'/'</code> المكرر وكذلك النقطة المفردة، إلا أنه لا يُتعامل بالمثل مع النقطتين المزدوجتين <code>'..'</code> وذلك لأن هذا قد يغير دلالة المسار في حال استخدام الروابط الرمزية:<syntaxhighlight lang="python3"> | |||
>>> PurePath('foo//bar') | >>> PurePath('foo//bar') | ||
PurePosixPath('foo/bar') | PurePosixPath('foo/bar') | ||
سطر 60: | سطر 48: | ||
</syntaxhighlight> | </syntaxhighlight>قد يبدو للوهلة الأولى أن المسار <code>PurePosixPath('foo/../bar')</code> يجب أن يكون مساويًا للمسار <code>PurePosixPath('bar')</code> ولكن ذلك غير صحيح إذا كان المجلد <code>'foo'</code> رابطًا رمزيًّا (symbolic link) لمجلد آخر. | ||
قد يبدو للوهلة الأولى أن المسار <code>PurePosixPath('foo/../bar')</code> يجب أن يكون مساويًا للمسار <code>PurePosixPath('bar')</code> ولكن ذلك غير صحيح إذا كان المجلد <code>'foo'</code> رابطًا رمزيًّا (symbolic link) لمجلد آخر. | |||
تقوم كائنات المسار النقي بتنفيذ الواجهة <code>os.PathLike</code>، بما يسمح باستخدامها في أي مكان تُقبل في هذه الواجهة. | تقوم كائنات المسار النقي بتنفيذ الواجهة <code>os.PathLike</code>، بما يسمح باستخدامها في أي مكان تُقبل في هذه الواجهة. | ||
سطر 82: | سطر 68: | ||
</syntaxhighlight>لا يمكن مقارنة كائنات المسارات من نكهات مختلفة ومن ثمّ فإن ترتيب عناصر من كائنات مسارات مختلفة النكهات غير ممكن. | </syntaxhighlight>لا يمكن مقارنة كائنات المسارات من نكهات مختلفة ومن ثمّ فإن ترتيب عناصر من كائنات مسارات مختلفة النكهات غير ممكن.<syntaxhighlight lang="python3"> | ||
<syntaxhighlight lang="python3"> | |||
>>> PureWindowsPath('foo') == PurePosixPath('foo') | >>> PureWindowsPath('foo') == PurePosixPath('foo') | ||
False | False | ||
سطر 97: | سطر 81: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
==العمليات المُعاد تعريفها للصنف <code>PurePath</code>== | |||
== العمليات المُعاد تعريفها للصنف <code>PurePath</code> == | |||
تساعد عملية القسمة <code>'/'</code> في إنشاء مسارات الأبناء، بشكل مشابه لما يقوم به التابع <code>os.path.join</code><syntaxhighlight lang="python3"> | تساعد عملية القسمة <code>'/'</code> في إنشاء مسارات الأبناء، بشكل مشابه لما يقوم به التابع <code>os.path.join</code><syntaxhighlight lang="python3"> | ||
>>> p = PurePath('/etc') | >>> p = PurePath('/etc') | ||
سطر 152: | سطر 135: | ||
يُستحسن استدعاء التابع <code>bytes</code> ضمن نظام يونكس فقط، فترميز <code>unicode</code> في نظام ويندوز هو التمثيل الأساسي لمسارات نظام الملفات. | يُستحسن استدعاء التابع <code>bytes</code> ضمن نظام يونكس فقط، فترميز <code>unicode</code> في نظام ويندوز هو التمثيل الأساسي لمسارات نظام الملفات. | ||
==المتغيرات الأعضاء في الصنف <code>PurePath</code>== | |||
== المتغيرات الأعضاء في الصنف <code>PurePath</code> == | ===[[Python/pathlib/PurePath/parts|المتغير <code>PurePath.parts</code>]]=== | ||
يمثّل هذا المتغير <code>tuple</code> لعناصر المسار | |||
===المتغير <code>PurePath.parts</code>=== | ===[[Python/pathlib/PurePath/drive|المتغير <code>PurePath.drive</code>]]=== | ||
يمثّل هذا المتغير <code>tuple</code> لعناصر المسار | سلسلة نصية تمثل اسم السواقة أو الحرف الممثل لها (في حال وجوده ضمن المسار) | ||
===المتغير <code>PurePath.anchor</code>=== | |||
يجمع اسم السواقة مع مسار الجذر<syntaxhighlight lang="python3"> | |||
سلسلة نصية تمثل اسم السواقة أو الحرف الممثل لها (في حال وجوده ضمن المسار) | |||
===المتغير <code>PurePath. | |||
<syntaxhighlight lang="python3"> | |||
>>> PureWindowsPath('c:/Program Files/').anchor | >>> PureWindowsPath('c:/Program Files/').anchor | ||
'c:\\' | 'c:\\' | ||
سطر 221: | سطر 154: | ||
'\\\\host\\share\\' | '\\\\host\\share\\' | ||
</syntaxhighlight> | </syntaxhighlight> | ||
===المتغير <code>PurePath.parents</code>=== | |||
===المتغير <code>PurePath.parents</code> === | سلسة غير قابلة للتعديل (immutable) تُعطي وصولًا للآباء المنطقية للمسار<syntaxhighlight lang="python3"> | ||
<syntaxhighlight lang="python3"> | |||
>>> p = PureWindowsPath('c:/foo/bar/setup.py') | >>> p = PureWindowsPath('c:/foo/bar/setup.py') | ||
سطر 239: | سطر 168: | ||
PureWindowsPath('c:/') | PureWindowsPath('c:/') | ||
</syntaxhighlight> | </syntaxhighlight> | ||
===[[Python/pathlib/PurePath/parent|المتغير <code>PurePath.parent</code>]]=== | |||
===المتغير <code>PurePath.parent</code> === | الأب المنطقي للمسار الحالي | ||
===المتغير <code>PurePath.name</code>=== | |||
سلسة نصية تُمثّل العنصر الأخير في المسار، مع استثناء السواقة ومسارالجذر إن وُجد أي منهما<syntaxhighlight lang="python3"> | |||
===المتغير <code>PurePath.name</code> === | |||
<syntaxhighlight lang="python3"> | |||
>>> PurePosixPath('my/library/setup.py').name | >>> PurePosixPath('my/library/setup.py').name | ||
'setup.py' | 'setup.py' | ||
</syntaxhighlight> | </syntaxhighlight>لا يؤخذ اعتبارٌ لأسماء سواقات المجلدات المُشاركة (UNC drive)<syntaxhighlight lang="python3"> | ||
UNC drive | |||
<syntaxhighlight lang="python3"> | |||
>>> PureWindowsPath('//some/share/setup.py').name | >>> PureWindowsPath('//some/share/setup.py').name | ||
'setup.py' | 'setup.py' | ||
سطر 295: | سطر 181: | ||
'' | '' | ||
</syntaxhighlight> | </syntaxhighlight> | ||
===المتغير <code>PurePath.suffix</code>=== | |||
===المتغير <code>PurePath.suffix</code> === | امتداد الملف لآخر عنصر في المسار (إن كان له امتداد)<syntaxhighlight lang="python3"> | ||
<syntaxhighlight lang="python3"> | |||
>>> PurePosixPath('my/library/setup.py').suffix | >>> PurePosixPath('my/library/setup.py').suffix | ||
'.py' | '.py' | ||
سطر 310: | سطر 192: | ||
'' | '' | ||
</syntaxhighlight> | </syntaxhighlight> | ||
===المتغير <code>PurePath.suffixes</code>=== | |||
===المتغير <code>PurePath.suffixes</code> === | قائمة بامتدادات الملف الذي يشير إليه المسار.<syntaxhighlight lang="python3"> | ||
<syntaxhighlight lang="python3"> | |||
>>> PurePosixPath('my/library.tar.gar').suffixes | >>> PurePosixPath('my/library.tar.gar').suffixes | ||
['.tar', '.gar'] | ['.tar', '.gar'] | ||
سطر 325: | سطر 203: | ||
[] | [] | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<syntaxhighlight lang="python3"> | === المتغير <code>PurePath.stem</code> === | ||
The final path component, without its suffix:<syntaxhighlight lang="python3"> | |||
>>> PurePosixPath('my/library.tar.gz').stem | >>> PurePosixPath('my/library.tar.gz').stem | ||
'library.tar' | 'library.tar' | ||
سطر 339: | سطر 215: | ||
'library' | 'library' | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== التوابع الأعضاء في الصنف <code>PurePath</code> == | |||
<syntaxhighlight lang="python3"> | === التابع <code>PurePath.as_posix</code> === | ||
Return a string representation of the path with forward slashes (/):<syntaxhighlight lang="python3"> | |||
>>> p = PureWindowsPath('c:\\windows') | >>> p = PureWindowsPath('c:\\windows') | ||
سطر 352: | سطر 228: | ||
'c:/windows' | 'c:/windows' | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<syntaxhighlight lang="python3"> | === التابع <code>PurePath.as_uri</code> === | ||
Represent the path as a file URI. ValueError is raised if the path isn’t absolute.<syntaxhighlight lang="python3"> | |||
>>> p = PurePosixPath('/etc/passwd') | >>> p = PurePosixPath('/etc/passwd') | ||
سطر 367: | سطر 241: | ||
'file:///c:/Windows' | 'file:///c:/Windows' | ||
</syntaxhighlight> | </syntaxhighlight> | ||
====التابع <code>PurePath.is_absolute</code>==== | |||
= | Return whether the path is absolute or not. A path is considered absolute if it has both a root and (if the flavour allows) a drive:<syntaxhighlight lang="python3"> | ||
===التابع <code>PurePath.is_absolute | |||
Return whether the path is absolute or not. A path is considered absolute if it has both a root and (if the flavour allows) a drive: | |||
<syntaxhighlight lang="python3"> | |||
>>> PurePosixPath('/a/b').is_absolute() | >>> PurePosixPath('/a/b').is_absolute() | ||
True | True | ||
سطر 392: | سطر 261: | ||
True | True | ||
</syntaxhighlight> | </syntaxhighlight> | ||
===التابع <code>PurePath.is_reserved</code>=== | |||
===التابع <code>PurePath.is_reserved | With PureWindowsPath, return True if the path is considered reserved under Windows, False otherwise. With PurePosixPath, False is always returned.<syntaxhighlight lang="python3"> | ||
With PureWindowsPath, return True if the path is considered reserved under Windows, False otherwise. With PurePosixPath, False is always returned. | |||
<syntaxhighlight lang="python3"> | |||
>>> PureWindowsPath('nul').is_reserved() | >>> PureWindowsPath('nul').is_reserved() | ||
True | True | ||
سطر 403: | سطر 268: | ||
>>> PurePosixPath('nul').is_reserved() | >>> PurePosixPath('nul').is_reserved() | ||
False | False | ||
</syntaxhighlight> | </syntaxhighlight>File system calls on reserved paths can fail mysteriously or have unintended effects. | ||
===التابع <code>PurePath.joinpath</code>=== | |||
File system calls on reserved paths can fail mysteriously or have unintended effects. | Calling this method is equivalent to combining the path with each of the other arguments in turn:<syntaxhighlight lang="python3"> | ||
===التابع <code>PurePath.joinpath | |||
Calling this method is equivalent to combining the path with each of the other arguments in turn: | |||
<syntaxhighlight lang="python3"> | |||
>>> PurePosixPath('/etc').joinpath('passwd') | >>> PurePosixPath('/etc').joinpath('passwd') | ||
PurePosixPath('/etc/passwd') | PurePosixPath('/etc/passwd') | ||
سطر 424: | سطر 283: | ||
PureWindowsPath('c:/Program Files') | PureWindowsPath('c:/Program Files') | ||
</syntaxhighlight> | </syntaxhighlight> | ||
===التابع <code>PurePath.match | ===التابع <code>PurePath.match</code>=== | ||
Match this path against the provided glob-style pattern. Return True if matching is successful, Falseotherwise. | Match this path against the provided glob-style pattern. Return True if matching is successful, Falseotherwise. | ||
If pattern is relative, the path can be either relative or absolute, and matching is done from the right: | If pattern is relative, the path can be either relative or absolute, and matching is done from the right:<syntaxhighlight lang="python3"> | ||
<syntaxhighlight lang="python3"> | |||
>>> PurePath('a/b.py').match('*.py') | >>> PurePath('a/b.py').match('*.py') | ||
True | True | ||
سطر 439: | سطر 295: | ||
>>> PurePath('/a/b/c.py').match('a/*.py') | >>> PurePath('/a/b/c.py').match('a/*.py') | ||
False | False | ||
</syntaxhighlight> | </syntaxhighlight>If pattern is absolute, the path must be absolute, and the whole path must match:<syntaxhighlight lang="python3"> | ||
If pattern is absolute, the path must be absolute, and the whole path must match: | |||
<syntaxhighlight lang="python3"> | |||
>>> PurePath('/a.py').match('/*.py') | >>> PurePath('/a.py').match('/*.py') | ||
True | True | ||
سطر 449: | سطر 301: | ||
>>> PurePath('a/b.py').match('/*.py') | >>> PurePath('a/b.py').match('/*.py') | ||
False | False | ||
</syntaxhighlight> | </syntaxhighlight>As with other methods, case-sensitivity is observed:<syntaxhighlight lang="python3"> | ||
As with other methods, case-sensitivity is observed: | |||
<syntaxhighlight lang="python3"> | |||
>>> PureWindowsPath('b.py').match('*.PY') | >>> PureWindowsPath('b.py').match('*.PY') | ||
True | True | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Compute a version of this path relative to the path represented by other. If it’s impossible, ValueError is raised: | === التابع <code>PurePath.relative_to</code> === | ||
Compute a version of this path relative to the path represented by other. If it’s impossible, ValueError is raised:<syntaxhighlight lang="python3"> | |||
<syntaxhighlight lang="python3"> | |||
>>> p = PurePosixPath('/etc/passwd') | >>> p = PurePosixPath('/etc/passwd') | ||
سطر 478: | سطر 324: | ||
ValueError: '/etc/passwd' does not start with '/usr' | ValueError: '/etc/passwd' does not start with '/usr' | ||
</syntaxhighlight> | </syntaxhighlight> | ||
===التابع <code>PurePath.with_name</code>=== | |||
===التابع <code>PurePath.with_name | Return a new path with the name changed. If the original path doesn’t have a name, ValueError is raised:<syntaxhighlight lang="python3"> | ||
Return a new path with the name changed. If the original path doesn’t have a name, ValueError is raised: | |||
<syntaxhighlight lang="python3"> | |||
>>> p = PureWindowsPath('c:/Downloads/pathlib.tar.gz') | >>> p = PureWindowsPath('c:/Downloads/pathlib.tar.gz') | ||
>>> p.with_name('setup.py') | >>> p.with_name('setup.py') | ||
سطر 496: | سطر 338: | ||
ValueError: PureWindowsPath('c:/') has an empty name | ValueError: PureWindowsPath('c:/') has an empty name | ||
</syntaxhighlight> | </syntaxhighlight> | ||
===التابع <code>PurePath.with_suffix</code>=== | |||
===التابع <code>PurePath.with_suffix | |||
Return a new path with the suffix changed. If the original path doesn’t have a suffix, the new suffix is appended instead:<syntaxhighlight lang="python3"> | Return a new path with the suffix changed. If the original path doesn’t have a suffix, the new suffix is appended instead:<syntaxhighlight lang="python3"> | ||
>>> p = PureWindowsPath('c:/Downloads/pathlib.tar.gz') | >>> p = PureWindowsPath('c:/Downloads/pathlib.tar.gz') | ||
سطر 510: | سطر 350: | ||
PureWindowsPath('README.txt') | PureWindowsPath('README.txt') | ||
</syntaxhighlight> | </syntaxhighlight> | ||
==التقابل مع الوحدة <code>os</code>== | ==التقابل مع الوحدة <code>os</code>== | ||
يبيّن الجدول التالي تقابل عدة توابع من الوحدة <code>os</code> مع ما يقابلها و يكافئها من الوحدة <code>PurePath</code>. | يبيّن الجدول التالي تقابل عدة توابع من الوحدة <code>os</code> مع ما يقابلها و يكافئها من الوحدة <code>PurePath</code>. | ||
<span> </span> | |||
{| class="wikitable" | {| class="wikitable" | ||
!الوحدة os والوحدة os.path | !الوحدة os والوحدة os.path |
مراجعة 08:31، 3 أغسطس 2018
الصنف pathlib.PurePath
في بايثون
يحوي هذا الصنف التوابع والعمليات الأساسية للتعامل مع المسارات، إلا أنها لا تحوي أي وصول حقيقي إلى نظام الملفات، ومن ثمّ فليس فيها أي عملية إدخال أو إخراج بل تقتصر على العمليات النصية على المسارات، ويمكننا تلخيص عملها بأنها توابع لمعالجة السلاسل النصية التي تمثل مسارات الملفات.
يمكن للمسارات النقية أن تكون مفيدةٌ في بعض الحالات الخاصة المماثلة لما يلي:
- لمعالجة مسارات نظام ويندوز أثناء العمل على جهاز يعمل بنظام يونكس (والعكس بالعكس)، حيث لا يمكنك إنشاء كائن من الصنف
WindowsPath
عند العمل على نظام يونكس، ولكن يمكنك إنشاء كائن من الصنفPureWindowsPath
. - عليك التأكد بأن الشيفرة البرمجية تعالج المسارات فقط دون الوصول الفعلي إلى نظام التشغيل، ففي هذه الحالة، يمكنك إنشاء كائن من أحد الأصناف النقية، فهي لا تملك عمليات تسمح لها بالوصول إلى نظام التشغيل.
يمكنك إنشاء كائنات من أيٍّ من الأصناف المذكورة آنفًا على أي نظام تشغيل، وذلك لأنها لا تقوم بأي استدعاءات من النظام.
الاستخدام الأساسي للصنف PurePath
يمكن إنشاء كائنات من هذا الصنف لمعالجة المسارات بحيث لا يتم الوصول الفعلي إلى نظام الملفات. وتوجد ثلاث طرائق لإنشاء كائنات من هذا الصنف (تُسمّى الطرق بالنكهات)
عند استخدام الصنف العام المجرد PurePath فإن الصنف الحقيقي للكائن المنشأ منه يعتمد على نظام التشغيل، فهو إما PurePosixPath أو PureWindowsPath
>>> PurePath('setup.py') # يتم العمل على نظام يونكس
PurePosixPath('setup.py')
يمكن لكل عنصر من الوسيط pathsegments أن يكون سلسلة نصية تمثل قطعة مسار أو كائنًا ينفذ الواجهة os.PathLike التي تعيد سلسلة نصية، كما يمكن أن تكون كائن مسار آخر.
>>> PurePath('foo', 'some/path', 'bar')
PurePosixPath('foo/some/path/bar')
>>> PurePath(Path('foo'), Path('bar'))
PurePosixPath('foo/bar')
ويُفترض وجود المسار '.' عندما يكون الوسيط pathsegments خاليًا:
>>> PurePath()
PurePosixPath('.')
عندما تُعطى عدة مسارات مطلقة، يُعتبر المسار الأخير على أنه مسار المبدأ(anchor) (بشكل مطابق لسلوك التابع os.path.join)
>>> PurePath('/etc', '/usr', 'lib64')
PurePosixPath('/usr/lib64')
>>> PureWindowsPath('c:/Windows', 'd:bar')
PureWindowsPath('d:bar')
عند العمل في مسارات ويندوز، فإن تغيير مجلد الجذر المحلي لا يؤدي إلى إهمال إعدادات القرص السابق
>>> PureWindowsPath('c:/Windows', '/Program Files')
PureWindowsPath('c:/Program Files')
يُضمّ رمز الشرطة '/'
المكرر وكذلك النقطة المفردة، إلا أنه لا يُتعامل بالمثل مع النقطتين المزدوجتين '..'
وذلك لأن هذا قد يغير دلالة المسار في حال استخدام الروابط الرمزية:
>>> PurePath('foo//bar')
PurePosixPath('foo/bar')
>>> PurePath('foo/./bar')
PurePosixPath('foo/bar')
>>> PurePath('foo/../bar')
PurePosixPath('foo/../bar')
قد يبدو للوهلة الأولى أن المسار PurePosixPath('foo/../bar')
يجب أن يكون مساويًا للمسار PurePosixPath('bar')
ولكن ذلك غير صحيح إذا كان المجلد 'foo'
رابطًا رمزيًّا (symbolic link) لمجلد آخر.
تقوم كائنات المسار النقي بتنفيذ الواجهة os.PathLike
، بما يسمح باستخدامها في أي مكان تُقبل في هذه الواجهة.
تغيرت في النسخة 3.6: أُضيف الدعم للواجهة os.PathLike
الخصائص الأساسية لكائنات الصنف PurePath
تتميز أصناف المسارات بكونها ثابتة immutable و قابلة للتهشير hashable، كما يمكن مقارنة وترتيب كائنات المسارات التي تكون من نفس النكهة مع مراعاة خصائص المسارات الخاصة بكل نكهة
>>> PurePosixPath('foo') == PurePosixPath('FOO')
False
>>> PureWindowsPath('foo') == PureWindowsPath('FOO')
True
>>> PureWindowsPath('FOO') in { PureWindowsPath('foo') } #لاحظ أن نظام ويندوز لا يهتم بحالة الحرف الإنكليزي في اسم الملف
True
>>> PureWindowsPath('C:') < PureWindowsPath('d:')
True
لا يمكن مقارنة كائنات المسارات من نكهات مختلفة ومن ثمّ فإن ترتيب عناصر من كائنات مسارات مختلفة النكهات غير ممكن.
>>> PureWindowsPath('foo') == PurePosixPath('foo')
False
>>> PureWindowsPath('foo') < PurePosixPath('foo')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: '<' not supported between instances of 'PureWindowsPath' and 'PurePosixPath'
العمليات المُعاد تعريفها للصنف PurePath
تساعد عملية القسمة '/'
في إنشاء مسارات الأبناء، بشكل مشابه لما يقوم به التابع os.path.join
>>> p = PurePath('/etc')
>>> p
PurePosixPath('/etc')
>>> p / 'init.d' / 'apache2'
PurePosixPath('/etc/init.d/apache2')
>>> q = PurePath('bin')
>>> '/usr' / q
PurePosixPath('/usr/bin')
يمكن استخدام كائنات المسارات في أي مكان يقبل كائنًا ينفذ الواجهة os.PathLike
>>> import os
>>> p = PurePath('/etc')
>>> os.fspath(p)
'/etc'
يعطي التمثيل النصي لكائن المسار المسار الخام ضمن نظام الملفات (فمثلًا تُستخدم الشرطة الخلفية المضاعفة في ويندوز، والشرطة الأمامية المفردة في لينوكس لفصل المسارات الآباء عن الأبناء).
>>> p = PurePath('/etc')
>>> str(p)
'/etc'
>>> p = PureWindowsPath('c:/Program Files')
>>> str(p)
'c:\\Program Files'
يعطي تمرير كائن مسار إلى التابع bytes
المسار الخام كما هو موجود في نظام الملفات ككائن من النوع bytes
وذلك بنفس طريقة التابع os.fsencode
>>> bytes(p)
b'/etc'
مثال آخر في نظام ويندوز
>>> p=Path('C:\\Program Files\\Everything\\Everything.exe')
>>> p
WindowsPath('C:/Program Files/Everything/Everything.exe')
>>> bytes(p)
b'C:\\Program Files\\Everything\\Everything.exe'
>>> os.fsencode(p)
b'C:\\Program Files\\Everything\\Everything.exe'
ملاحظة:
يُستحسن استدعاء التابع bytes
ضمن نظام يونكس فقط، فترميز unicode
في نظام ويندوز هو التمثيل الأساسي لمسارات نظام الملفات.
المتغيرات الأعضاء في الصنف PurePath
المتغير PurePath.parts
يمثّل هذا المتغير tuple
لعناصر المسار
المتغير PurePath.drive
سلسلة نصية تمثل اسم السواقة أو الحرف الممثل لها (في حال وجوده ضمن المسار)
المتغير PurePath.anchor
يجمع اسم السواقة مع مسار الجذر
>>> PureWindowsPath('c:/Program Files/').anchor
'c:\\'
>>> PureWindowsPath('c:Program Files/').anchor
'c:'
>>> PurePosixPath('/etc').anchor
'/'
>>> PureWindowsPath('//host/share').anchor
'\\\\host\\share\\'
المتغير PurePath.parents
سلسة غير قابلة للتعديل (immutable) تُعطي وصولًا للآباء المنطقية للمسار
>>> p = PureWindowsPath('c:/foo/bar/setup.py')
>>> p.parents[0]
PureWindowsPath('c:/foo/bar')
>>> p.parents[1]
PureWindowsPath('c:/foo')
>>> p.parents[2]
PureWindowsPath('c:/')
المتغير PurePath.parent
الأب المنطقي للمسار الحالي
المتغير PurePath.name
سلسة نصية تُمثّل العنصر الأخير في المسار، مع استثناء السواقة ومسارالجذر إن وُجد أي منهما
>>> PurePosixPath('my/library/setup.py').name
'setup.py'
لا يؤخذ اعتبارٌ لأسماء سواقات المجلدات المُشاركة (UNC drive)
>>> PureWindowsPath('//some/share/setup.py').name
'setup.py'
>>> PureWindowsPath('//some/share').name
''
المتغير PurePath.suffix
امتداد الملف لآخر عنصر في المسار (إن كان له امتداد)
>>> PurePosixPath('my/library/setup.py').suffix
'.py'
>>> PurePosixPath('my/library.tar.gz').suffix
'.gz'
>>> PurePosixPath('my/library').suffix
''
المتغير PurePath.suffixes
قائمة بامتدادات الملف الذي يشير إليه المسار.
>>> PurePosixPath('my/library.tar.gar').suffixes
['.tar', '.gar']
>>> PurePosixPath('my/library.tar.gz').suffixes
['.tar', '.gz']
>>> PurePosixPath('my/library').suffixes
[]
المتغير PurePath.stem
The final path component, without its suffix:
>>> PurePosixPath('my/library.tar.gz').stem
'library.tar'
>>> PurePosixPath('my/library.tar').stem
'library'
>>> PurePosixPath('my/library').stem
'library'
التوابع الأعضاء في الصنف PurePath
التابع PurePath.as_posix
Return a string representation of the path with forward slashes (/):
>>> p = PureWindowsPath('c:\\windows')
>>> str(p)
'c:\\windows'
>>> p.as_posix()
'c:/windows'
التابع PurePath.as_uri
Represent the path as a file URI. ValueError is raised if the path isn’t absolute.
>>> p = PurePosixPath('/etc/passwd')
>>> p.as_uri()
'file:///etc/passwd'
>>> p = PureWindowsPath('c:/Windows')
>>> p.as_uri()
'file:///c:/Windows'
التابع PurePath.is_absolute
Return whether the path is absolute or not. A path is considered absolute if it has both a root and (if the flavour allows) a drive:
>>> PurePosixPath('/a/b').is_absolute()
True
>>> PurePosixPath('a/b').is_absolute()
False
>>> PureWindowsPath('c:/a/b').is_absolute()
True
>>> PureWindowsPath('/a/b').is_absolute()
False
>>> PureWindowsPath('c:').is_absolute()
False
>>> PureWindowsPath('//some/share').is_absolute()
True
التابع PurePath.is_reserved
With PureWindowsPath, return True if the path is considered reserved under Windows, False otherwise. With PurePosixPath, False is always returned.
>>> PureWindowsPath('nul').is_reserved()
True
>>> PurePosixPath('nul').is_reserved()
False
File system calls on reserved paths can fail mysteriously or have unintended effects.
التابع PurePath.joinpath
Calling this method is equivalent to combining the path with each of the other arguments in turn:
>>> PurePosixPath('/etc').joinpath('passwd')
PurePosixPath('/etc/passwd')
>>> PurePosixPath('/etc').joinpath(PurePosixPath('passwd'))
PurePosixPath('/etc/passwd')
>>> PurePosixPath('/etc').joinpath('init.d', 'apache2')
PurePosixPath('/etc/init.d/apache2')
>>> PureWindowsPath('c:').joinpath('/Program Files')
PureWindowsPath('c:/Program Files')
التابع PurePath.match
Match this path against the provided glob-style pattern. Return True if matching is successful, Falseotherwise.
If pattern is relative, the path can be either relative or absolute, and matching is done from the right:
>>> PurePath('a/b.py').match('*.py')
True
>>> PurePath('/a/b/c.py').match('b/*.py')
True
>>> PurePath('/a/b/c.py').match('a/*.py')
False
If pattern is absolute, the path must be absolute, and the whole path must match:
>>> PurePath('/a.py').match('/*.py')
True
>>> PurePath('a/b.py').match('/*.py')
False
As with other methods, case-sensitivity is observed:
>>> PureWindowsPath('b.py').match('*.PY')
True
التابع PurePath.relative_to
Compute a version of this path relative to the path represented by other. If it’s impossible, ValueError is raised:
>>> p = PurePosixPath('/etc/passwd')
>>> p.relative_to('/')
PurePosixPath('etc/passwd')
>>> p.relative_to('/etc')
PurePosixPath('passwd')
>>> p.relative_to('/usr')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "pathlib.py", line 694, in relative_to
.format(str(self), str(formatted)))
ValueError: '/etc/passwd' does not start with '/usr'
التابع PurePath.with_name
Return a new path with the name changed. If the original path doesn’t have a name, ValueError is raised:
>>> p = PureWindowsPath('c:/Downloads/pathlib.tar.gz')
>>> p.with_name('setup.py')
PureWindowsPath('c:/Downloads/setup.py')
>>> p = PureWindowsPath('c:/')
>>> p.with_name('setup.py')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/antoine/cpython/default/Lib/pathlib.py", line 751, in with_name
raise ValueError("%r has an empty name" % (self,))
ValueError: PureWindowsPath('c:/') has an empty name
التابع PurePath.with_suffix
Return a new path with the suffix changed. If the original path doesn’t have a suffix, the new suffix is appended instead:
>>> p = PureWindowsPath('c:/Downloads/pathlib.tar.gz')
>>> p.with_suffix('.bz2')
PureWindowsPath('c:/Downloads/pathlib.tar.bz2')
>>> p = PureWindowsPath('README')
>>> p.with_suffix('.txt')
PureWindowsPath('README.txt')
التقابل مع الوحدة os
يبيّن الجدول التالي تقابل عدة توابع من الوحدة os
مع ما يقابلها و يكافئها من الوحدة PurePath
.
الوحدة os والوحدة os.path | الوحدة pathlib |
---|---|
os.path.isabs() | PurePath.is_absolute() |
os.path.join() | PurePath.joinpath() |
os.path.basename() | PurePath.name |
os.path.dirname() | PurePath.parent |
os.path.splitext() | PurePath.suffix |