Skip to main content

Lib/pathlib/_abc.py

cpython 3.14 @ ab2d84fe1023/Lib/pathlib/_abc.py

Lib/pathlib/_abc.py defines the abstract path base classes introduced in CPython 3.12. PurePath provides all string-manipulation operations that do not touch the filesystem. Path extends it with I/O operations. The concrete PosixPath and WindowsPath subclasses live in Lib/pathlib/_local.py.

Map​

LinesSymbolRole
1-80_PathParentsSequence of parent paths
81-350PurePathString manipulation: parse, join, parent, name, suffix
351-500PurePath.relative_to, is_relative_to, matchComparison operations
501-620PathBaseAbstract I/O protocol (open, stat, iterdir, etc.)

Reading​

PurePath parsing​

PurePath.__new__ joins all arguments with os.sep and calls _from_parsed_string. The result stores _drv (drive), _root, and _tail (list of path components) as slots.

# CPython: Lib/pathlib/_abc.py:105 PurePath.__new__
def __new__(cls, *args, **kwargs):
paths = []
for arg in args:
...
paths.append(os.fspath(arg))
path = cls._from_parsed_parts(drv, root, tail)
return path

parent and parents​

PurePath.parent returns _from_parsed_parts(drv, root, tail[:-1]). The _PathParents sequence wraps this with __getitem__ and __len__ for path.parents[2] style access.

relative_to​

relative_to compares leading components. In Python 3.12+ it also accepts walk_up=True which inserts .. components to walk up out of the base before descending.

# CPython: Lib/pathlib/_abc.py:400 PurePath.relative_to
def relative_to(self, other, /, *_deprecated, walk_up=False):
other = self.with_segments(other, *_deprecated)
...
if walk_up:
parts = ['..'] * (len(other._tail) - anchor_len) + self._tail[anchor_len:]
...

match​

match converts a glob pattern to a regex using re.compile and matches against the string representation. The case_sensitive parameter (default: platform-dependent) was added in Python 3.12.

gopy notes​

Not yet ported. pathlib depends on os.path and os.fspath, which must be available first. The PurePath string manipulation subset can be ported independently of the I/O methods. Planned path: module/pathlib/.