17db96d56Sopenharmony_ci 27db96d56Sopenharmony_ci:mod:`pathlib` --- Object-oriented filesystem paths 37db96d56Sopenharmony_ci=================================================== 47db96d56Sopenharmony_ci 57db96d56Sopenharmony_ci.. module:: pathlib 67db96d56Sopenharmony_ci :synopsis: Object-oriented filesystem paths 77db96d56Sopenharmony_ci 87db96d56Sopenharmony_ci.. versionadded:: 3.4 97db96d56Sopenharmony_ci 107db96d56Sopenharmony_ci**Source code:** :source:`Lib/pathlib.py` 117db96d56Sopenharmony_ci 127db96d56Sopenharmony_ci.. index:: single: path; operations 137db96d56Sopenharmony_ci 147db96d56Sopenharmony_ci-------------- 157db96d56Sopenharmony_ci 167db96d56Sopenharmony_ciThis module offers classes representing filesystem paths with semantics 177db96d56Sopenharmony_ciappropriate for different operating systems. Path classes are divided 187db96d56Sopenharmony_cibetween :ref:`pure paths <pure-paths>`, which provide purely computational 197db96d56Sopenharmony_cioperations without I/O, and :ref:`concrete paths <concrete-paths>`, which 207db96d56Sopenharmony_ciinherit from pure paths but also provide I/O operations. 217db96d56Sopenharmony_ci 227db96d56Sopenharmony_ci.. image:: pathlib-inheritance.png 237db96d56Sopenharmony_ci :align: center 247db96d56Sopenharmony_ci :class: invert-in-dark-mode 257db96d56Sopenharmony_ci 267db96d56Sopenharmony_ciIf you've never used this module before or just aren't sure which class is 277db96d56Sopenharmony_ciright for your task, :class:`Path` is most likely what you need. It instantiates 287db96d56Sopenharmony_cia :ref:`concrete path <concrete-paths>` for the platform the code is running on. 297db96d56Sopenharmony_ci 307db96d56Sopenharmony_ciPure paths are useful in some special cases; for example: 317db96d56Sopenharmony_ci 327db96d56Sopenharmony_ci#. If you want to manipulate Windows paths on a Unix machine (or vice versa). 337db96d56Sopenharmony_ci You cannot instantiate a :class:`WindowsPath` when running on Unix, but you 347db96d56Sopenharmony_ci can instantiate :class:`PureWindowsPath`. 357db96d56Sopenharmony_ci#. You want to make sure that your code only manipulates paths without actually 367db96d56Sopenharmony_ci accessing the OS. In this case, instantiating one of the pure classes may be 377db96d56Sopenharmony_ci useful since those simply don't have any OS-accessing operations. 387db96d56Sopenharmony_ci 397db96d56Sopenharmony_ci.. seealso:: 407db96d56Sopenharmony_ci :pep:`428`: The pathlib module -- object-oriented filesystem paths. 417db96d56Sopenharmony_ci 427db96d56Sopenharmony_ci.. seealso:: 437db96d56Sopenharmony_ci For low-level path manipulation on strings, you can also use the 447db96d56Sopenharmony_ci :mod:`os.path` module. 457db96d56Sopenharmony_ci 467db96d56Sopenharmony_ci 477db96d56Sopenharmony_ciBasic use 487db96d56Sopenharmony_ci--------- 497db96d56Sopenharmony_ci 507db96d56Sopenharmony_ciImporting the main class:: 517db96d56Sopenharmony_ci 527db96d56Sopenharmony_ci >>> from pathlib import Path 537db96d56Sopenharmony_ci 547db96d56Sopenharmony_ciListing subdirectories:: 557db96d56Sopenharmony_ci 567db96d56Sopenharmony_ci >>> p = Path('.') 577db96d56Sopenharmony_ci >>> [x for x in p.iterdir() if x.is_dir()] 587db96d56Sopenharmony_ci [PosixPath('.hg'), PosixPath('docs'), PosixPath('dist'), 597db96d56Sopenharmony_ci PosixPath('__pycache__'), PosixPath('build')] 607db96d56Sopenharmony_ci 617db96d56Sopenharmony_ciListing Python source files in this directory tree:: 627db96d56Sopenharmony_ci 637db96d56Sopenharmony_ci >>> list(p.glob('**/*.py')) 647db96d56Sopenharmony_ci [PosixPath('test_pathlib.py'), PosixPath('setup.py'), 657db96d56Sopenharmony_ci PosixPath('pathlib.py'), PosixPath('docs/conf.py'), 667db96d56Sopenharmony_ci PosixPath('build/lib/pathlib.py')] 677db96d56Sopenharmony_ci 687db96d56Sopenharmony_ciNavigating inside a directory tree:: 697db96d56Sopenharmony_ci 707db96d56Sopenharmony_ci >>> p = Path('/etc') 717db96d56Sopenharmony_ci >>> q = p / 'init.d' / 'reboot' 727db96d56Sopenharmony_ci >>> q 737db96d56Sopenharmony_ci PosixPath('/etc/init.d/reboot') 747db96d56Sopenharmony_ci >>> q.resolve() 757db96d56Sopenharmony_ci PosixPath('/etc/rc.d/init.d/halt') 767db96d56Sopenharmony_ci 777db96d56Sopenharmony_ciQuerying path properties:: 787db96d56Sopenharmony_ci 797db96d56Sopenharmony_ci >>> q.exists() 807db96d56Sopenharmony_ci True 817db96d56Sopenharmony_ci >>> q.is_dir() 827db96d56Sopenharmony_ci False 837db96d56Sopenharmony_ci 847db96d56Sopenharmony_ciOpening a file:: 857db96d56Sopenharmony_ci 867db96d56Sopenharmony_ci >>> with q.open() as f: f.readline() 877db96d56Sopenharmony_ci ... 887db96d56Sopenharmony_ci '#!/bin/bash\n' 897db96d56Sopenharmony_ci 907db96d56Sopenharmony_ci 917db96d56Sopenharmony_ci.. _pure-paths: 927db96d56Sopenharmony_ci 937db96d56Sopenharmony_ciPure paths 947db96d56Sopenharmony_ci---------- 957db96d56Sopenharmony_ci 967db96d56Sopenharmony_ciPure path objects provide path-handling operations which don't actually 977db96d56Sopenharmony_ciaccess a filesystem. There are three ways to access these classes, which 987db96d56Sopenharmony_ciwe also call *flavours*: 997db96d56Sopenharmony_ci 1007db96d56Sopenharmony_ci.. class:: PurePath(*pathsegments) 1017db96d56Sopenharmony_ci 1027db96d56Sopenharmony_ci A generic class that represents the system's path flavour (instantiating 1037db96d56Sopenharmony_ci it creates either a :class:`PurePosixPath` or a :class:`PureWindowsPath`):: 1047db96d56Sopenharmony_ci 1057db96d56Sopenharmony_ci >>> PurePath('setup.py') # Running on a Unix machine 1067db96d56Sopenharmony_ci PurePosixPath('setup.py') 1077db96d56Sopenharmony_ci 1087db96d56Sopenharmony_ci Each element of *pathsegments* can be either a string representing a 1097db96d56Sopenharmony_ci path segment, an object implementing the :class:`os.PathLike` interface 1107db96d56Sopenharmony_ci which returns a string, or another path object:: 1117db96d56Sopenharmony_ci 1127db96d56Sopenharmony_ci >>> PurePath('foo', 'some/path', 'bar') 1137db96d56Sopenharmony_ci PurePosixPath('foo/some/path/bar') 1147db96d56Sopenharmony_ci >>> PurePath(Path('foo'), Path('bar')) 1157db96d56Sopenharmony_ci PurePosixPath('foo/bar') 1167db96d56Sopenharmony_ci 1177db96d56Sopenharmony_ci When *pathsegments* is empty, the current directory is assumed:: 1187db96d56Sopenharmony_ci 1197db96d56Sopenharmony_ci >>> PurePath() 1207db96d56Sopenharmony_ci PurePosixPath('.') 1217db96d56Sopenharmony_ci 1227db96d56Sopenharmony_ci If a segment is an absolute path, all previous segments are ignored 1237db96d56Sopenharmony_ci (like :func:`os.path.join`):: 1247db96d56Sopenharmony_ci 1257db96d56Sopenharmony_ci >>> PurePath('/etc', '/usr', 'lib64') 1267db96d56Sopenharmony_ci PurePosixPath('/usr/lib64') 1277db96d56Sopenharmony_ci >>> PureWindowsPath('c:/Windows', 'd:bar') 1287db96d56Sopenharmony_ci PureWindowsPath('d:bar') 1297db96d56Sopenharmony_ci 1307db96d56Sopenharmony_ci On Windows, the drive is not reset when a rooted relative path 1317db96d56Sopenharmony_ci segment (e.g., ``r'\foo'``) is encountered:: 1327db96d56Sopenharmony_ci 1337db96d56Sopenharmony_ci >>> PureWindowsPath('c:/Windows', '/Program Files') 1347db96d56Sopenharmony_ci PureWindowsPath('c:/Program Files') 1357db96d56Sopenharmony_ci 1367db96d56Sopenharmony_ci Spurious slashes and single dots are collapsed, but double dots (``'..'``) 1377db96d56Sopenharmony_ci and leading double slashes (``'//'``) are not, since this would change the 1387db96d56Sopenharmony_ci meaning of a path for various reasons (e.g. symbolic links, UNC paths):: 1397db96d56Sopenharmony_ci 1407db96d56Sopenharmony_ci >>> PurePath('foo//bar') 1417db96d56Sopenharmony_ci PurePosixPath('foo/bar') 1427db96d56Sopenharmony_ci >>> PurePath('//foo/bar') 1437db96d56Sopenharmony_ci PurePosixPath('//foo/bar') 1447db96d56Sopenharmony_ci >>> PurePath('foo/./bar') 1457db96d56Sopenharmony_ci PurePosixPath('foo/bar') 1467db96d56Sopenharmony_ci >>> PurePath('foo/../bar') 1477db96d56Sopenharmony_ci PurePosixPath('foo/../bar') 1487db96d56Sopenharmony_ci 1497db96d56Sopenharmony_ci (a naïve approach would make ``PurePosixPath('foo/../bar')`` equivalent 1507db96d56Sopenharmony_ci to ``PurePosixPath('bar')``, which is wrong if ``foo`` is a symbolic link 1517db96d56Sopenharmony_ci to another directory) 1527db96d56Sopenharmony_ci 1537db96d56Sopenharmony_ci Pure path objects implement the :class:`os.PathLike` interface, allowing them 1547db96d56Sopenharmony_ci to be used anywhere the interface is accepted. 1557db96d56Sopenharmony_ci 1567db96d56Sopenharmony_ci .. versionchanged:: 3.6 1577db96d56Sopenharmony_ci Added support for the :class:`os.PathLike` interface. 1587db96d56Sopenharmony_ci 1597db96d56Sopenharmony_ci.. class:: PurePosixPath(*pathsegments) 1607db96d56Sopenharmony_ci 1617db96d56Sopenharmony_ci A subclass of :class:`PurePath`, this path flavour represents non-Windows 1627db96d56Sopenharmony_ci filesystem paths:: 1637db96d56Sopenharmony_ci 1647db96d56Sopenharmony_ci >>> PurePosixPath('/etc') 1657db96d56Sopenharmony_ci PurePosixPath('/etc') 1667db96d56Sopenharmony_ci 1677db96d56Sopenharmony_ci *pathsegments* is specified similarly to :class:`PurePath`. 1687db96d56Sopenharmony_ci 1697db96d56Sopenharmony_ci.. class:: PureWindowsPath(*pathsegments) 1707db96d56Sopenharmony_ci 1717db96d56Sopenharmony_ci A subclass of :class:`PurePath`, this path flavour represents Windows 1727db96d56Sopenharmony_ci filesystem paths, including `UNC paths`_:: 1737db96d56Sopenharmony_ci 1747db96d56Sopenharmony_ci >>> PureWindowsPath('c:/Program Files/') 1757db96d56Sopenharmony_ci PureWindowsPath('c:/Program Files') 1767db96d56Sopenharmony_ci >>> PureWindowsPath('//server/share/file') 1777db96d56Sopenharmony_ci PureWindowsPath('//server/share/file') 1787db96d56Sopenharmony_ci 1797db96d56Sopenharmony_ci *pathsegments* is specified similarly to :class:`PurePath`. 1807db96d56Sopenharmony_ci 1817db96d56Sopenharmony_ci .. _unc paths: https://en.wikipedia.org/wiki/Path_(computing)#UNC 1827db96d56Sopenharmony_ci 1837db96d56Sopenharmony_ciRegardless of the system you're running on, you can instantiate all of 1847db96d56Sopenharmony_cithese classes, since they don't provide any operation that does system calls. 1857db96d56Sopenharmony_ci 1867db96d56Sopenharmony_ci 1877db96d56Sopenharmony_ciGeneral properties 1887db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^ 1897db96d56Sopenharmony_ci 1907db96d56Sopenharmony_ciPaths are immutable and :term:`hashable`. Paths of a same flavour are comparable 1917db96d56Sopenharmony_ciand orderable. These properties respect the flavour's case-folding 1927db96d56Sopenharmony_cisemantics:: 1937db96d56Sopenharmony_ci 1947db96d56Sopenharmony_ci >>> PurePosixPath('foo') == PurePosixPath('FOO') 1957db96d56Sopenharmony_ci False 1967db96d56Sopenharmony_ci >>> PureWindowsPath('foo') == PureWindowsPath('FOO') 1977db96d56Sopenharmony_ci True 1987db96d56Sopenharmony_ci >>> PureWindowsPath('FOO') in { PureWindowsPath('foo') } 1997db96d56Sopenharmony_ci True 2007db96d56Sopenharmony_ci >>> PureWindowsPath('C:') < PureWindowsPath('d:') 2017db96d56Sopenharmony_ci True 2027db96d56Sopenharmony_ci 2037db96d56Sopenharmony_ciPaths of a different flavour compare unequal and cannot be ordered:: 2047db96d56Sopenharmony_ci 2057db96d56Sopenharmony_ci >>> PureWindowsPath('foo') == PurePosixPath('foo') 2067db96d56Sopenharmony_ci False 2077db96d56Sopenharmony_ci >>> PureWindowsPath('foo') < PurePosixPath('foo') 2087db96d56Sopenharmony_ci Traceback (most recent call last): 2097db96d56Sopenharmony_ci File "<stdin>", line 1, in <module> 2107db96d56Sopenharmony_ci TypeError: '<' not supported between instances of 'PureWindowsPath' and 'PurePosixPath' 2117db96d56Sopenharmony_ci 2127db96d56Sopenharmony_ci 2137db96d56Sopenharmony_ciOperators 2147db96d56Sopenharmony_ci^^^^^^^^^ 2157db96d56Sopenharmony_ci 2167db96d56Sopenharmony_ciThe slash operator helps create child paths, like :func:`os.path.join`. 2177db96d56Sopenharmony_ciIf the argument is an absolute path, the previous path is ignored. 2187db96d56Sopenharmony_ciOn Windows, the drive is not reset when the argument is a rooted 2197db96d56Sopenharmony_cirelative path (e.g., ``r'\foo'``):: 2207db96d56Sopenharmony_ci 2217db96d56Sopenharmony_ci >>> p = PurePath('/etc') 2227db96d56Sopenharmony_ci >>> p 2237db96d56Sopenharmony_ci PurePosixPath('/etc') 2247db96d56Sopenharmony_ci >>> p / 'init.d' / 'apache2' 2257db96d56Sopenharmony_ci PurePosixPath('/etc/init.d/apache2') 2267db96d56Sopenharmony_ci >>> q = PurePath('bin') 2277db96d56Sopenharmony_ci >>> '/usr' / q 2287db96d56Sopenharmony_ci PurePosixPath('/usr/bin') 2297db96d56Sopenharmony_ci >>> p / '/an_absolute_path' 2307db96d56Sopenharmony_ci PurePosixPath('/an_absolute_path') 2317db96d56Sopenharmony_ci >>> PureWindowsPath('c:/Windows', '/Program Files') 2327db96d56Sopenharmony_ci PureWindowsPath('c:/Program Files') 2337db96d56Sopenharmony_ci 2347db96d56Sopenharmony_ciA path object can be used anywhere an object implementing :class:`os.PathLike` 2357db96d56Sopenharmony_ciis accepted:: 2367db96d56Sopenharmony_ci 2377db96d56Sopenharmony_ci >>> import os 2387db96d56Sopenharmony_ci >>> p = PurePath('/etc') 2397db96d56Sopenharmony_ci >>> os.fspath(p) 2407db96d56Sopenharmony_ci '/etc' 2417db96d56Sopenharmony_ci 2427db96d56Sopenharmony_ciThe string representation of a path is the raw filesystem path itself 2437db96d56Sopenharmony_ci(in native form, e.g. with backslashes under Windows), which you can 2447db96d56Sopenharmony_cipass to any function taking a file path as a string:: 2457db96d56Sopenharmony_ci 2467db96d56Sopenharmony_ci >>> p = PurePath('/etc') 2477db96d56Sopenharmony_ci >>> str(p) 2487db96d56Sopenharmony_ci '/etc' 2497db96d56Sopenharmony_ci >>> p = PureWindowsPath('c:/Program Files') 2507db96d56Sopenharmony_ci >>> str(p) 2517db96d56Sopenharmony_ci 'c:\\Program Files' 2527db96d56Sopenharmony_ci 2537db96d56Sopenharmony_ciSimilarly, calling :class:`bytes` on a path gives the raw filesystem path as a 2547db96d56Sopenharmony_cibytes object, as encoded by :func:`os.fsencode`:: 2557db96d56Sopenharmony_ci 2567db96d56Sopenharmony_ci >>> bytes(p) 2577db96d56Sopenharmony_ci b'/etc' 2587db96d56Sopenharmony_ci 2597db96d56Sopenharmony_ci.. note:: 2607db96d56Sopenharmony_ci Calling :class:`bytes` is only recommended under Unix. Under Windows, 2617db96d56Sopenharmony_ci the unicode form is the canonical representation of filesystem paths. 2627db96d56Sopenharmony_ci 2637db96d56Sopenharmony_ci 2647db96d56Sopenharmony_ciAccessing individual parts 2657db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^^^^^^ 2667db96d56Sopenharmony_ci 2677db96d56Sopenharmony_ciTo access the individual "parts" (components) of a path, use the following 2687db96d56Sopenharmony_ciproperty: 2697db96d56Sopenharmony_ci 2707db96d56Sopenharmony_ci.. attribute:: PurePath.parts 2717db96d56Sopenharmony_ci 2727db96d56Sopenharmony_ci A tuple giving access to the path's various components:: 2737db96d56Sopenharmony_ci 2747db96d56Sopenharmony_ci >>> p = PurePath('/usr/bin/python3') 2757db96d56Sopenharmony_ci >>> p.parts 2767db96d56Sopenharmony_ci ('/', 'usr', 'bin', 'python3') 2777db96d56Sopenharmony_ci 2787db96d56Sopenharmony_ci >>> p = PureWindowsPath('c:/Program Files/PSF') 2797db96d56Sopenharmony_ci >>> p.parts 2807db96d56Sopenharmony_ci ('c:\\', 'Program Files', 'PSF') 2817db96d56Sopenharmony_ci 2827db96d56Sopenharmony_ci (note how the drive and local root are regrouped in a single part) 2837db96d56Sopenharmony_ci 2847db96d56Sopenharmony_ci 2857db96d56Sopenharmony_ciMethods and properties 2867db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^^ 2877db96d56Sopenharmony_ci 2887db96d56Sopenharmony_ci.. testsetup:: 2897db96d56Sopenharmony_ci 2907db96d56Sopenharmony_ci from pathlib import PurePath, PurePosixPath, PureWindowsPath 2917db96d56Sopenharmony_ci 2927db96d56Sopenharmony_ciPure paths provide the following methods and properties: 2937db96d56Sopenharmony_ci 2947db96d56Sopenharmony_ci.. attribute:: PurePath.drive 2957db96d56Sopenharmony_ci 2967db96d56Sopenharmony_ci A string representing the drive letter or name, if any:: 2977db96d56Sopenharmony_ci 2987db96d56Sopenharmony_ci >>> PureWindowsPath('c:/Program Files/').drive 2997db96d56Sopenharmony_ci 'c:' 3007db96d56Sopenharmony_ci >>> PureWindowsPath('/Program Files/').drive 3017db96d56Sopenharmony_ci '' 3027db96d56Sopenharmony_ci >>> PurePosixPath('/etc').drive 3037db96d56Sopenharmony_ci '' 3047db96d56Sopenharmony_ci 3057db96d56Sopenharmony_ci UNC shares are also considered drives:: 3067db96d56Sopenharmony_ci 3077db96d56Sopenharmony_ci >>> PureWindowsPath('//host/share/foo.txt').drive 3087db96d56Sopenharmony_ci '\\\\host\\share' 3097db96d56Sopenharmony_ci 3107db96d56Sopenharmony_ci.. attribute:: PurePath.root 3117db96d56Sopenharmony_ci 3127db96d56Sopenharmony_ci A string representing the (local or global) root, if any:: 3137db96d56Sopenharmony_ci 3147db96d56Sopenharmony_ci >>> PureWindowsPath('c:/Program Files/').root 3157db96d56Sopenharmony_ci '\\' 3167db96d56Sopenharmony_ci >>> PureWindowsPath('c:Program Files/').root 3177db96d56Sopenharmony_ci '' 3187db96d56Sopenharmony_ci >>> PurePosixPath('/etc').root 3197db96d56Sopenharmony_ci '/' 3207db96d56Sopenharmony_ci 3217db96d56Sopenharmony_ci UNC shares always have a root:: 3227db96d56Sopenharmony_ci 3237db96d56Sopenharmony_ci >>> PureWindowsPath('//host/share').root 3247db96d56Sopenharmony_ci '\\' 3257db96d56Sopenharmony_ci 3267db96d56Sopenharmony_ci If the path starts with more than two successive slashes, 3277db96d56Sopenharmony_ci :class:`~pathlib.PurePosixPath` collapses them:: 3287db96d56Sopenharmony_ci 3297db96d56Sopenharmony_ci >>> PurePosixPath('//etc').root 3307db96d56Sopenharmony_ci '//' 3317db96d56Sopenharmony_ci >>> PurePosixPath('///etc').root 3327db96d56Sopenharmony_ci '/' 3337db96d56Sopenharmony_ci >>> PurePosixPath('////etc').root 3347db96d56Sopenharmony_ci '/' 3357db96d56Sopenharmony_ci 3367db96d56Sopenharmony_ci .. note:: 3377db96d56Sopenharmony_ci 3387db96d56Sopenharmony_ci This behavior conforms to *The Open Group Base Specifications Issue 6*, 3397db96d56Sopenharmony_ci paragraph `4.11 Pathname Resolution 3407db96d56Sopenharmony_ci <https://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap04.html#tag_04_11>`_: 3417db96d56Sopenharmony_ci 3427db96d56Sopenharmony_ci *"A pathname that begins with two successive slashes may be interpreted in 3437db96d56Sopenharmony_ci an implementation-defined manner, although more than two leading slashes 3447db96d56Sopenharmony_ci shall be treated as a single slash."* 3457db96d56Sopenharmony_ci 3467db96d56Sopenharmony_ci.. attribute:: PurePath.anchor 3477db96d56Sopenharmony_ci 3487db96d56Sopenharmony_ci The concatenation of the drive and root:: 3497db96d56Sopenharmony_ci 3507db96d56Sopenharmony_ci >>> PureWindowsPath('c:/Program Files/').anchor 3517db96d56Sopenharmony_ci 'c:\\' 3527db96d56Sopenharmony_ci >>> PureWindowsPath('c:Program Files/').anchor 3537db96d56Sopenharmony_ci 'c:' 3547db96d56Sopenharmony_ci >>> PurePosixPath('/etc').anchor 3557db96d56Sopenharmony_ci '/' 3567db96d56Sopenharmony_ci >>> PureWindowsPath('//host/share').anchor 3577db96d56Sopenharmony_ci '\\\\host\\share\\' 3587db96d56Sopenharmony_ci 3597db96d56Sopenharmony_ci 3607db96d56Sopenharmony_ci.. attribute:: PurePath.parents 3617db96d56Sopenharmony_ci 3627db96d56Sopenharmony_ci An immutable sequence providing access to the logical ancestors of 3637db96d56Sopenharmony_ci the path:: 3647db96d56Sopenharmony_ci 3657db96d56Sopenharmony_ci >>> p = PureWindowsPath('c:/foo/bar/setup.py') 3667db96d56Sopenharmony_ci >>> p.parents[0] 3677db96d56Sopenharmony_ci PureWindowsPath('c:/foo/bar') 3687db96d56Sopenharmony_ci >>> p.parents[1] 3697db96d56Sopenharmony_ci PureWindowsPath('c:/foo') 3707db96d56Sopenharmony_ci >>> p.parents[2] 3717db96d56Sopenharmony_ci PureWindowsPath('c:/') 3727db96d56Sopenharmony_ci 3737db96d56Sopenharmony_ci .. versionchanged:: 3.10 3747db96d56Sopenharmony_ci The parents sequence now supports :term:`slices <slice>` and negative index values. 3757db96d56Sopenharmony_ci 3767db96d56Sopenharmony_ci.. attribute:: PurePath.parent 3777db96d56Sopenharmony_ci 3787db96d56Sopenharmony_ci The logical parent of the path:: 3797db96d56Sopenharmony_ci 3807db96d56Sopenharmony_ci >>> p = PurePosixPath('/a/b/c/d') 3817db96d56Sopenharmony_ci >>> p.parent 3827db96d56Sopenharmony_ci PurePosixPath('/a/b/c') 3837db96d56Sopenharmony_ci 3847db96d56Sopenharmony_ci You cannot go past an anchor, or empty path:: 3857db96d56Sopenharmony_ci 3867db96d56Sopenharmony_ci >>> p = PurePosixPath('/') 3877db96d56Sopenharmony_ci >>> p.parent 3887db96d56Sopenharmony_ci PurePosixPath('/') 3897db96d56Sopenharmony_ci >>> p = PurePosixPath('.') 3907db96d56Sopenharmony_ci >>> p.parent 3917db96d56Sopenharmony_ci PurePosixPath('.') 3927db96d56Sopenharmony_ci 3937db96d56Sopenharmony_ci .. note:: 3947db96d56Sopenharmony_ci This is a purely lexical operation, hence the following behaviour:: 3957db96d56Sopenharmony_ci 3967db96d56Sopenharmony_ci >>> p = PurePosixPath('foo/..') 3977db96d56Sopenharmony_ci >>> p.parent 3987db96d56Sopenharmony_ci PurePosixPath('foo') 3997db96d56Sopenharmony_ci 4007db96d56Sopenharmony_ci If you want to walk an arbitrary filesystem path upwards, it is 4017db96d56Sopenharmony_ci recommended to first call :meth:`Path.resolve` so as to resolve 4027db96d56Sopenharmony_ci symlinks and eliminate ``".."`` components. 4037db96d56Sopenharmony_ci 4047db96d56Sopenharmony_ci 4057db96d56Sopenharmony_ci.. attribute:: PurePath.name 4067db96d56Sopenharmony_ci 4077db96d56Sopenharmony_ci A string representing the final path component, excluding the drive and 4087db96d56Sopenharmony_ci root, if any:: 4097db96d56Sopenharmony_ci 4107db96d56Sopenharmony_ci >>> PurePosixPath('my/library/setup.py').name 4117db96d56Sopenharmony_ci 'setup.py' 4127db96d56Sopenharmony_ci 4137db96d56Sopenharmony_ci UNC drive names are not considered:: 4147db96d56Sopenharmony_ci 4157db96d56Sopenharmony_ci >>> PureWindowsPath('//some/share/setup.py').name 4167db96d56Sopenharmony_ci 'setup.py' 4177db96d56Sopenharmony_ci >>> PureWindowsPath('//some/share').name 4187db96d56Sopenharmony_ci '' 4197db96d56Sopenharmony_ci 4207db96d56Sopenharmony_ci 4217db96d56Sopenharmony_ci.. attribute:: PurePath.suffix 4227db96d56Sopenharmony_ci 4237db96d56Sopenharmony_ci The file extension of the final component, if any:: 4247db96d56Sopenharmony_ci 4257db96d56Sopenharmony_ci >>> PurePosixPath('my/library/setup.py').suffix 4267db96d56Sopenharmony_ci '.py' 4277db96d56Sopenharmony_ci >>> PurePosixPath('my/library.tar.gz').suffix 4287db96d56Sopenharmony_ci '.gz' 4297db96d56Sopenharmony_ci >>> PurePosixPath('my/library').suffix 4307db96d56Sopenharmony_ci '' 4317db96d56Sopenharmony_ci 4327db96d56Sopenharmony_ci 4337db96d56Sopenharmony_ci.. attribute:: PurePath.suffixes 4347db96d56Sopenharmony_ci 4357db96d56Sopenharmony_ci A list of the path's file extensions:: 4367db96d56Sopenharmony_ci 4377db96d56Sopenharmony_ci >>> PurePosixPath('my/library.tar.gar').suffixes 4387db96d56Sopenharmony_ci ['.tar', '.gar'] 4397db96d56Sopenharmony_ci >>> PurePosixPath('my/library.tar.gz').suffixes 4407db96d56Sopenharmony_ci ['.tar', '.gz'] 4417db96d56Sopenharmony_ci >>> PurePosixPath('my/library').suffixes 4427db96d56Sopenharmony_ci [] 4437db96d56Sopenharmony_ci 4447db96d56Sopenharmony_ci 4457db96d56Sopenharmony_ci.. attribute:: PurePath.stem 4467db96d56Sopenharmony_ci 4477db96d56Sopenharmony_ci The final path component, without its suffix:: 4487db96d56Sopenharmony_ci 4497db96d56Sopenharmony_ci >>> PurePosixPath('my/library.tar.gz').stem 4507db96d56Sopenharmony_ci 'library.tar' 4517db96d56Sopenharmony_ci >>> PurePosixPath('my/library.tar').stem 4527db96d56Sopenharmony_ci 'library' 4537db96d56Sopenharmony_ci >>> PurePosixPath('my/library').stem 4547db96d56Sopenharmony_ci 'library' 4557db96d56Sopenharmony_ci 4567db96d56Sopenharmony_ci 4577db96d56Sopenharmony_ci.. method:: PurePath.as_posix() 4587db96d56Sopenharmony_ci 4597db96d56Sopenharmony_ci Return a string representation of the path with forward slashes (``/``):: 4607db96d56Sopenharmony_ci 4617db96d56Sopenharmony_ci >>> p = PureWindowsPath('c:\\windows') 4627db96d56Sopenharmony_ci >>> str(p) 4637db96d56Sopenharmony_ci 'c:\\windows' 4647db96d56Sopenharmony_ci >>> p.as_posix() 4657db96d56Sopenharmony_ci 'c:/windows' 4667db96d56Sopenharmony_ci 4677db96d56Sopenharmony_ci 4687db96d56Sopenharmony_ci.. method:: PurePath.as_uri() 4697db96d56Sopenharmony_ci 4707db96d56Sopenharmony_ci Represent the path as a ``file`` URI. :exc:`ValueError` is raised if 4717db96d56Sopenharmony_ci the path isn't absolute. 4727db96d56Sopenharmony_ci 4737db96d56Sopenharmony_ci >>> p = PurePosixPath('/etc/passwd') 4747db96d56Sopenharmony_ci >>> p.as_uri() 4757db96d56Sopenharmony_ci 'file:///etc/passwd' 4767db96d56Sopenharmony_ci >>> p = PureWindowsPath('c:/Windows') 4777db96d56Sopenharmony_ci >>> p.as_uri() 4787db96d56Sopenharmony_ci 'file:///c:/Windows' 4797db96d56Sopenharmony_ci 4807db96d56Sopenharmony_ci 4817db96d56Sopenharmony_ci.. method:: PurePath.is_absolute() 4827db96d56Sopenharmony_ci 4837db96d56Sopenharmony_ci Return whether the path is absolute or not. A path is considered absolute 4847db96d56Sopenharmony_ci if it has both a root and (if the flavour allows) a drive:: 4857db96d56Sopenharmony_ci 4867db96d56Sopenharmony_ci >>> PurePosixPath('/a/b').is_absolute() 4877db96d56Sopenharmony_ci True 4887db96d56Sopenharmony_ci >>> PurePosixPath('a/b').is_absolute() 4897db96d56Sopenharmony_ci False 4907db96d56Sopenharmony_ci 4917db96d56Sopenharmony_ci >>> PureWindowsPath('c:/a/b').is_absolute() 4927db96d56Sopenharmony_ci True 4937db96d56Sopenharmony_ci >>> PureWindowsPath('/a/b').is_absolute() 4947db96d56Sopenharmony_ci False 4957db96d56Sopenharmony_ci >>> PureWindowsPath('c:').is_absolute() 4967db96d56Sopenharmony_ci False 4977db96d56Sopenharmony_ci >>> PureWindowsPath('//some/share').is_absolute() 4987db96d56Sopenharmony_ci True 4997db96d56Sopenharmony_ci 5007db96d56Sopenharmony_ci 5017db96d56Sopenharmony_ci.. method:: PurePath.is_relative_to(*other) 5027db96d56Sopenharmony_ci 5037db96d56Sopenharmony_ci Return whether or not this path is relative to the *other* path. 5047db96d56Sopenharmony_ci 5057db96d56Sopenharmony_ci >>> p = PurePath('/etc/passwd') 5067db96d56Sopenharmony_ci >>> p.is_relative_to('/etc') 5077db96d56Sopenharmony_ci True 5087db96d56Sopenharmony_ci >>> p.is_relative_to('/usr') 5097db96d56Sopenharmony_ci False 5107db96d56Sopenharmony_ci 5117db96d56Sopenharmony_ci .. versionadded:: 3.9 5127db96d56Sopenharmony_ci 5137db96d56Sopenharmony_ci 5147db96d56Sopenharmony_ci.. method:: PurePath.is_reserved() 5157db96d56Sopenharmony_ci 5167db96d56Sopenharmony_ci With :class:`PureWindowsPath`, return ``True`` if the path is considered 5177db96d56Sopenharmony_ci reserved under Windows, ``False`` otherwise. With :class:`PurePosixPath`, 5187db96d56Sopenharmony_ci ``False`` is always returned. 5197db96d56Sopenharmony_ci 5207db96d56Sopenharmony_ci >>> PureWindowsPath('nul').is_reserved() 5217db96d56Sopenharmony_ci True 5227db96d56Sopenharmony_ci >>> PurePosixPath('nul').is_reserved() 5237db96d56Sopenharmony_ci False 5247db96d56Sopenharmony_ci 5257db96d56Sopenharmony_ci File system calls on reserved paths can fail mysteriously or have 5267db96d56Sopenharmony_ci unintended effects. 5277db96d56Sopenharmony_ci 5287db96d56Sopenharmony_ci 5297db96d56Sopenharmony_ci.. method:: PurePath.joinpath(*other) 5307db96d56Sopenharmony_ci 5317db96d56Sopenharmony_ci Calling this method is equivalent to combining the path with each of 5327db96d56Sopenharmony_ci the *other* arguments in turn:: 5337db96d56Sopenharmony_ci 5347db96d56Sopenharmony_ci >>> PurePosixPath('/etc').joinpath('passwd') 5357db96d56Sopenharmony_ci PurePosixPath('/etc/passwd') 5367db96d56Sopenharmony_ci >>> PurePosixPath('/etc').joinpath(PurePosixPath('passwd')) 5377db96d56Sopenharmony_ci PurePosixPath('/etc/passwd') 5387db96d56Sopenharmony_ci >>> PurePosixPath('/etc').joinpath('init.d', 'apache2') 5397db96d56Sopenharmony_ci PurePosixPath('/etc/init.d/apache2') 5407db96d56Sopenharmony_ci >>> PureWindowsPath('c:').joinpath('/Program Files') 5417db96d56Sopenharmony_ci PureWindowsPath('c:/Program Files') 5427db96d56Sopenharmony_ci 5437db96d56Sopenharmony_ci 5447db96d56Sopenharmony_ci.. method:: PurePath.match(pattern) 5457db96d56Sopenharmony_ci 5467db96d56Sopenharmony_ci Match this path against the provided glob-style pattern. Return ``True`` 5477db96d56Sopenharmony_ci if matching is successful, ``False`` otherwise. 5487db96d56Sopenharmony_ci 5497db96d56Sopenharmony_ci If *pattern* is relative, the path can be either relative or absolute, 5507db96d56Sopenharmony_ci and matching is done from the right:: 5517db96d56Sopenharmony_ci 5527db96d56Sopenharmony_ci >>> PurePath('a/b.py').match('*.py') 5537db96d56Sopenharmony_ci True 5547db96d56Sopenharmony_ci >>> PurePath('/a/b/c.py').match('b/*.py') 5557db96d56Sopenharmony_ci True 5567db96d56Sopenharmony_ci >>> PurePath('/a/b/c.py').match('a/*.py') 5577db96d56Sopenharmony_ci False 5587db96d56Sopenharmony_ci 5597db96d56Sopenharmony_ci If *pattern* is absolute, the path must be absolute, and the whole path 5607db96d56Sopenharmony_ci must match:: 5617db96d56Sopenharmony_ci 5627db96d56Sopenharmony_ci >>> PurePath('/a.py').match('/*.py') 5637db96d56Sopenharmony_ci True 5647db96d56Sopenharmony_ci >>> PurePath('a/b.py').match('/*.py') 5657db96d56Sopenharmony_ci False 5667db96d56Sopenharmony_ci 5677db96d56Sopenharmony_ci As with other methods, case-sensitivity follows platform defaults:: 5687db96d56Sopenharmony_ci 5697db96d56Sopenharmony_ci >>> PurePosixPath('b.py').match('*.PY') 5707db96d56Sopenharmony_ci False 5717db96d56Sopenharmony_ci >>> PureWindowsPath('b.py').match('*.PY') 5727db96d56Sopenharmony_ci True 5737db96d56Sopenharmony_ci 5747db96d56Sopenharmony_ci 5757db96d56Sopenharmony_ci.. method:: PurePath.relative_to(*other) 5767db96d56Sopenharmony_ci 5777db96d56Sopenharmony_ci Compute a version of this path relative to the path represented by 5787db96d56Sopenharmony_ci *other*. If it's impossible, ValueError is raised:: 5797db96d56Sopenharmony_ci 5807db96d56Sopenharmony_ci >>> p = PurePosixPath('/etc/passwd') 5817db96d56Sopenharmony_ci >>> p.relative_to('/') 5827db96d56Sopenharmony_ci PurePosixPath('etc/passwd') 5837db96d56Sopenharmony_ci >>> p.relative_to('/etc') 5847db96d56Sopenharmony_ci PurePosixPath('passwd') 5857db96d56Sopenharmony_ci >>> p.relative_to('/usr') 5867db96d56Sopenharmony_ci Traceback (most recent call last): 5877db96d56Sopenharmony_ci File "<stdin>", line 1, in <module> 5887db96d56Sopenharmony_ci File "pathlib.py", line 694, in relative_to 5897db96d56Sopenharmony_ci .format(str(self), str(formatted))) 5907db96d56Sopenharmony_ci ValueError: '/etc/passwd' is not in the subpath of '/usr' OR one path is relative and the other absolute. 5917db96d56Sopenharmony_ci 5927db96d56Sopenharmony_ci NOTE: This function is part of :class:`PurePath` and works with strings. It does not check or access the underlying file structure. 5937db96d56Sopenharmony_ci 5947db96d56Sopenharmony_ci 5957db96d56Sopenharmony_ci.. method:: PurePath.with_name(name) 5967db96d56Sopenharmony_ci 5977db96d56Sopenharmony_ci Return a new path with the :attr:`name` changed. If the original path 5987db96d56Sopenharmony_ci doesn't have a name, ValueError is raised:: 5997db96d56Sopenharmony_ci 6007db96d56Sopenharmony_ci >>> p = PureWindowsPath('c:/Downloads/pathlib.tar.gz') 6017db96d56Sopenharmony_ci >>> p.with_name('setup.py') 6027db96d56Sopenharmony_ci PureWindowsPath('c:/Downloads/setup.py') 6037db96d56Sopenharmony_ci >>> p = PureWindowsPath('c:/') 6047db96d56Sopenharmony_ci >>> p.with_name('setup.py') 6057db96d56Sopenharmony_ci Traceback (most recent call last): 6067db96d56Sopenharmony_ci File "<stdin>", line 1, in <module> 6077db96d56Sopenharmony_ci File "/home/antoine/cpython/default/Lib/pathlib.py", line 751, in with_name 6087db96d56Sopenharmony_ci raise ValueError("%r has an empty name" % (self,)) 6097db96d56Sopenharmony_ci ValueError: PureWindowsPath('c:/') has an empty name 6107db96d56Sopenharmony_ci 6117db96d56Sopenharmony_ci 6127db96d56Sopenharmony_ci.. method:: PurePath.with_stem(stem) 6137db96d56Sopenharmony_ci 6147db96d56Sopenharmony_ci Return a new path with the :attr:`stem` changed. If the original path 6157db96d56Sopenharmony_ci doesn't have a name, ValueError is raised:: 6167db96d56Sopenharmony_ci 6177db96d56Sopenharmony_ci >>> p = PureWindowsPath('c:/Downloads/draft.txt') 6187db96d56Sopenharmony_ci >>> p.with_stem('final') 6197db96d56Sopenharmony_ci PureWindowsPath('c:/Downloads/final.txt') 6207db96d56Sopenharmony_ci >>> p = PureWindowsPath('c:/Downloads/pathlib.tar.gz') 6217db96d56Sopenharmony_ci >>> p.with_stem('lib') 6227db96d56Sopenharmony_ci PureWindowsPath('c:/Downloads/lib.gz') 6237db96d56Sopenharmony_ci >>> p = PureWindowsPath('c:/') 6247db96d56Sopenharmony_ci >>> p.with_stem('') 6257db96d56Sopenharmony_ci Traceback (most recent call last): 6267db96d56Sopenharmony_ci File "<stdin>", line 1, in <module> 6277db96d56Sopenharmony_ci File "/home/antoine/cpython/default/Lib/pathlib.py", line 861, in with_stem 6287db96d56Sopenharmony_ci return self.with_name(stem + self.suffix) 6297db96d56Sopenharmony_ci File "/home/antoine/cpython/default/Lib/pathlib.py", line 851, in with_name 6307db96d56Sopenharmony_ci raise ValueError("%r has an empty name" % (self,)) 6317db96d56Sopenharmony_ci ValueError: PureWindowsPath('c:/') has an empty name 6327db96d56Sopenharmony_ci 6337db96d56Sopenharmony_ci .. versionadded:: 3.9 6347db96d56Sopenharmony_ci 6357db96d56Sopenharmony_ci 6367db96d56Sopenharmony_ci.. method:: PurePath.with_suffix(suffix) 6377db96d56Sopenharmony_ci 6387db96d56Sopenharmony_ci Return a new path with the :attr:`suffix` changed. If the original path 6397db96d56Sopenharmony_ci doesn't have a suffix, the new *suffix* is appended instead. If the 6407db96d56Sopenharmony_ci *suffix* is an empty string, the original suffix is removed:: 6417db96d56Sopenharmony_ci 6427db96d56Sopenharmony_ci >>> p = PureWindowsPath('c:/Downloads/pathlib.tar.gz') 6437db96d56Sopenharmony_ci >>> p.with_suffix('.bz2') 6447db96d56Sopenharmony_ci PureWindowsPath('c:/Downloads/pathlib.tar.bz2') 6457db96d56Sopenharmony_ci >>> p = PureWindowsPath('README') 6467db96d56Sopenharmony_ci >>> p.with_suffix('.txt') 6477db96d56Sopenharmony_ci PureWindowsPath('README.txt') 6487db96d56Sopenharmony_ci >>> p = PureWindowsPath('README.txt') 6497db96d56Sopenharmony_ci >>> p.with_suffix('') 6507db96d56Sopenharmony_ci PureWindowsPath('README') 6517db96d56Sopenharmony_ci 6527db96d56Sopenharmony_ci 6537db96d56Sopenharmony_ci.. _concrete-paths: 6547db96d56Sopenharmony_ci 6557db96d56Sopenharmony_ci 6567db96d56Sopenharmony_ciConcrete paths 6577db96d56Sopenharmony_ci-------------- 6587db96d56Sopenharmony_ci 6597db96d56Sopenharmony_ciConcrete paths are subclasses of the pure path classes. In addition to 6607db96d56Sopenharmony_cioperations provided by the latter, they also provide methods to do system 6617db96d56Sopenharmony_cicalls on path objects. There are three ways to instantiate concrete paths: 6627db96d56Sopenharmony_ci 6637db96d56Sopenharmony_ci.. class:: Path(*pathsegments) 6647db96d56Sopenharmony_ci 6657db96d56Sopenharmony_ci A subclass of :class:`PurePath`, this class represents concrete paths of 6667db96d56Sopenharmony_ci the system's path flavour (instantiating it creates either a 6677db96d56Sopenharmony_ci :class:`PosixPath` or a :class:`WindowsPath`):: 6687db96d56Sopenharmony_ci 6697db96d56Sopenharmony_ci >>> Path('setup.py') 6707db96d56Sopenharmony_ci PosixPath('setup.py') 6717db96d56Sopenharmony_ci 6727db96d56Sopenharmony_ci *pathsegments* is specified similarly to :class:`PurePath`. 6737db96d56Sopenharmony_ci 6747db96d56Sopenharmony_ci.. class:: PosixPath(*pathsegments) 6757db96d56Sopenharmony_ci 6767db96d56Sopenharmony_ci A subclass of :class:`Path` and :class:`PurePosixPath`, this class 6777db96d56Sopenharmony_ci represents concrete non-Windows filesystem paths:: 6787db96d56Sopenharmony_ci 6797db96d56Sopenharmony_ci >>> PosixPath('/etc') 6807db96d56Sopenharmony_ci PosixPath('/etc') 6817db96d56Sopenharmony_ci 6827db96d56Sopenharmony_ci *pathsegments* is specified similarly to :class:`PurePath`. 6837db96d56Sopenharmony_ci 6847db96d56Sopenharmony_ci.. class:: WindowsPath(*pathsegments) 6857db96d56Sopenharmony_ci 6867db96d56Sopenharmony_ci A subclass of :class:`Path` and :class:`PureWindowsPath`, this class 6877db96d56Sopenharmony_ci represents concrete Windows filesystem paths:: 6887db96d56Sopenharmony_ci 6897db96d56Sopenharmony_ci >>> WindowsPath('c:/Program Files/') 6907db96d56Sopenharmony_ci WindowsPath('c:/Program Files') 6917db96d56Sopenharmony_ci 6927db96d56Sopenharmony_ci *pathsegments* is specified similarly to :class:`PurePath`. 6937db96d56Sopenharmony_ci 6947db96d56Sopenharmony_ciYou can only instantiate the class flavour that corresponds to your system 6957db96d56Sopenharmony_ci(allowing system calls on non-compatible path flavours could lead to 6967db96d56Sopenharmony_cibugs or failures in your application):: 6977db96d56Sopenharmony_ci 6987db96d56Sopenharmony_ci >>> import os 6997db96d56Sopenharmony_ci >>> os.name 7007db96d56Sopenharmony_ci 'posix' 7017db96d56Sopenharmony_ci >>> Path('setup.py') 7027db96d56Sopenharmony_ci PosixPath('setup.py') 7037db96d56Sopenharmony_ci >>> PosixPath('setup.py') 7047db96d56Sopenharmony_ci PosixPath('setup.py') 7057db96d56Sopenharmony_ci >>> WindowsPath('setup.py') 7067db96d56Sopenharmony_ci Traceback (most recent call last): 7077db96d56Sopenharmony_ci File "<stdin>", line 1, in <module> 7087db96d56Sopenharmony_ci File "pathlib.py", line 798, in __new__ 7097db96d56Sopenharmony_ci % (cls.__name__,)) 7107db96d56Sopenharmony_ci NotImplementedError: cannot instantiate 'WindowsPath' on your system 7117db96d56Sopenharmony_ci 7127db96d56Sopenharmony_ci 7137db96d56Sopenharmony_ciMethods 7147db96d56Sopenharmony_ci^^^^^^^ 7157db96d56Sopenharmony_ci 7167db96d56Sopenharmony_ciConcrete paths provide the following methods in addition to pure paths 7177db96d56Sopenharmony_cimethods. Many of these methods can raise an :exc:`OSError` if a system 7187db96d56Sopenharmony_cicall fails (for example because the path doesn't exist). 7197db96d56Sopenharmony_ci 7207db96d56Sopenharmony_ci.. versionchanged:: 3.8 7217db96d56Sopenharmony_ci 7227db96d56Sopenharmony_ci :meth:`~Path.exists()`, :meth:`~Path.is_dir()`, :meth:`~Path.is_file()`, 7237db96d56Sopenharmony_ci :meth:`~Path.is_mount()`, :meth:`~Path.is_symlink()`, 7247db96d56Sopenharmony_ci :meth:`~Path.is_block_device()`, :meth:`~Path.is_char_device()`, 7257db96d56Sopenharmony_ci :meth:`~Path.is_fifo()`, :meth:`~Path.is_socket()` now return ``False`` 7267db96d56Sopenharmony_ci instead of raising an exception for paths that contain characters 7277db96d56Sopenharmony_ci unrepresentable at the OS level. 7287db96d56Sopenharmony_ci 7297db96d56Sopenharmony_ci 7307db96d56Sopenharmony_ci.. classmethod:: Path.cwd() 7317db96d56Sopenharmony_ci 7327db96d56Sopenharmony_ci Return a new path object representing the current directory (as returned 7337db96d56Sopenharmony_ci by :func:`os.getcwd`):: 7347db96d56Sopenharmony_ci 7357db96d56Sopenharmony_ci >>> Path.cwd() 7367db96d56Sopenharmony_ci PosixPath('/home/antoine/pathlib') 7377db96d56Sopenharmony_ci 7387db96d56Sopenharmony_ci 7397db96d56Sopenharmony_ci.. classmethod:: Path.home() 7407db96d56Sopenharmony_ci 7417db96d56Sopenharmony_ci Return a new path object representing the user's home directory (as 7427db96d56Sopenharmony_ci returned by :func:`os.path.expanduser` with ``~`` construct). If the home 7437db96d56Sopenharmony_ci directory can't be resolved, :exc:`RuntimeError` is raised. 7447db96d56Sopenharmony_ci 7457db96d56Sopenharmony_ci :: 7467db96d56Sopenharmony_ci 7477db96d56Sopenharmony_ci >>> Path.home() 7487db96d56Sopenharmony_ci PosixPath('/home/antoine') 7497db96d56Sopenharmony_ci 7507db96d56Sopenharmony_ci .. versionadded:: 3.5 7517db96d56Sopenharmony_ci 7527db96d56Sopenharmony_ci 7537db96d56Sopenharmony_ci.. method:: Path.stat(*, follow_symlinks=True) 7547db96d56Sopenharmony_ci 7557db96d56Sopenharmony_ci Return a :class:`os.stat_result` object containing information about this path, like :func:`os.stat`. 7567db96d56Sopenharmony_ci The result is looked up at each call to this method. 7577db96d56Sopenharmony_ci 7587db96d56Sopenharmony_ci This method normally follows symlinks; to stat a symlink add the argument 7597db96d56Sopenharmony_ci ``follow_symlinks=False``, or use :meth:`~Path.lstat`. 7607db96d56Sopenharmony_ci 7617db96d56Sopenharmony_ci :: 7627db96d56Sopenharmony_ci 7637db96d56Sopenharmony_ci >>> p = Path('setup.py') 7647db96d56Sopenharmony_ci >>> p.stat().st_size 7657db96d56Sopenharmony_ci 956 7667db96d56Sopenharmony_ci >>> p.stat().st_mtime 7677db96d56Sopenharmony_ci 1327883547.852554 7687db96d56Sopenharmony_ci 7697db96d56Sopenharmony_ci .. versionchanged:: 3.10 7707db96d56Sopenharmony_ci The *follow_symlinks* parameter was added. 7717db96d56Sopenharmony_ci 7727db96d56Sopenharmony_ci.. method:: Path.chmod(mode, *, follow_symlinks=True) 7737db96d56Sopenharmony_ci 7747db96d56Sopenharmony_ci Change the file mode and permissions, like :func:`os.chmod`. 7757db96d56Sopenharmony_ci 7767db96d56Sopenharmony_ci This method normally follows symlinks. Some Unix flavours support changing 7777db96d56Sopenharmony_ci permissions on the symlink itself; on these platforms you may add the 7787db96d56Sopenharmony_ci argument ``follow_symlinks=False``, or use :meth:`~Path.lchmod`. 7797db96d56Sopenharmony_ci 7807db96d56Sopenharmony_ci :: 7817db96d56Sopenharmony_ci 7827db96d56Sopenharmony_ci >>> p = Path('setup.py') 7837db96d56Sopenharmony_ci >>> p.stat().st_mode 7847db96d56Sopenharmony_ci 33277 7857db96d56Sopenharmony_ci >>> p.chmod(0o444) 7867db96d56Sopenharmony_ci >>> p.stat().st_mode 7877db96d56Sopenharmony_ci 33060 7887db96d56Sopenharmony_ci 7897db96d56Sopenharmony_ci .. versionchanged:: 3.10 7907db96d56Sopenharmony_ci The *follow_symlinks* parameter was added. 7917db96d56Sopenharmony_ci 7927db96d56Sopenharmony_ci.. method:: Path.exists() 7937db96d56Sopenharmony_ci 7947db96d56Sopenharmony_ci Whether the path points to an existing file or directory:: 7957db96d56Sopenharmony_ci 7967db96d56Sopenharmony_ci >>> Path('.').exists() 7977db96d56Sopenharmony_ci True 7987db96d56Sopenharmony_ci >>> Path('setup.py').exists() 7997db96d56Sopenharmony_ci True 8007db96d56Sopenharmony_ci >>> Path('/etc').exists() 8017db96d56Sopenharmony_ci True 8027db96d56Sopenharmony_ci >>> Path('nonexistentfile').exists() 8037db96d56Sopenharmony_ci False 8047db96d56Sopenharmony_ci 8057db96d56Sopenharmony_ci .. note:: 8067db96d56Sopenharmony_ci If the path points to a symlink, :meth:`exists` returns whether the 8077db96d56Sopenharmony_ci symlink *points to* an existing file or directory. 8087db96d56Sopenharmony_ci 8097db96d56Sopenharmony_ci 8107db96d56Sopenharmony_ci.. method:: Path.expanduser() 8117db96d56Sopenharmony_ci 8127db96d56Sopenharmony_ci Return a new path with expanded ``~`` and ``~user`` constructs, 8137db96d56Sopenharmony_ci as returned by :meth:`os.path.expanduser`. If a home directory can't be 8147db96d56Sopenharmony_ci resolved, :exc:`RuntimeError` is raised. 8157db96d56Sopenharmony_ci 8167db96d56Sopenharmony_ci :: 8177db96d56Sopenharmony_ci 8187db96d56Sopenharmony_ci >>> p = PosixPath('~/films/Monty Python') 8197db96d56Sopenharmony_ci >>> p.expanduser() 8207db96d56Sopenharmony_ci PosixPath('/home/eric/films/Monty Python') 8217db96d56Sopenharmony_ci 8227db96d56Sopenharmony_ci .. versionadded:: 3.5 8237db96d56Sopenharmony_ci 8247db96d56Sopenharmony_ci 8257db96d56Sopenharmony_ci.. method:: Path.glob(pattern) 8267db96d56Sopenharmony_ci 8277db96d56Sopenharmony_ci Glob the given relative *pattern* in the directory represented by this path, 8287db96d56Sopenharmony_ci yielding all matching files (of any kind):: 8297db96d56Sopenharmony_ci 8307db96d56Sopenharmony_ci >>> sorted(Path('.').glob('*.py')) 8317db96d56Sopenharmony_ci [PosixPath('pathlib.py'), PosixPath('setup.py'), PosixPath('test_pathlib.py')] 8327db96d56Sopenharmony_ci >>> sorted(Path('.').glob('*/*.py')) 8337db96d56Sopenharmony_ci [PosixPath('docs/conf.py')] 8347db96d56Sopenharmony_ci 8357db96d56Sopenharmony_ci Patterns are the same as for :mod:`fnmatch`, with the addition of "``**``" 8367db96d56Sopenharmony_ci which means "this directory and all subdirectories, recursively". In other 8377db96d56Sopenharmony_ci words, it enables recursive globbing:: 8387db96d56Sopenharmony_ci 8397db96d56Sopenharmony_ci >>> sorted(Path('.').glob('**/*.py')) 8407db96d56Sopenharmony_ci [PosixPath('build/lib/pathlib.py'), 8417db96d56Sopenharmony_ci PosixPath('docs/conf.py'), 8427db96d56Sopenharmony_ci PosixPath('pathlib.py'), 8437db96d56Sopenharmony_ci PosixPath('setup.py'), 8447db96d56Sopenharmony_ci PosixPath('test_pathlib.py')] 8457db96d56Sopenharmony_ci 8467db96d56Sopenharmony_ci .. note:: 8477db96d56Sopenharmony_ci Using the "``**``" pattern in large directory trees may consume 8487db96d56Sopenharmony_ci an inordinate amount of time. 8497db96d56Sopenharmony_ci 8507db96d56Sopenharmony_ci .. audit-event:: pathlib.Path.glob self,pattern pathlib.Path.glob 8517db96d56Sopenharmony_ci 8527db96d56Sopenharmony_ci .. versionchanged:: 3.11 8537db96d56Sopenharmony_ci Return only directories if *pattern* ends with a pathname components 8547db96d56Sopenharmony_ci separator (:data:`~os.sep` or :data:`~os.altsep`). 8557db96d56Sopenharmony_ci 8567db96d56Sopenharmony_ci.. method:: Path.group() 8577db96d56Sopenharmony_ci 8587db96d56Sopenharmony_ci Return the name of the group owning the file. :exc:`KeyError` is raised 8597db96d56Sopenharmony_ci if the file's gid isn't found in the system database. 8607db96d56Sopenharmony_ci 8617db96d56Sopenharmony_ci 8627db96d56Sopenharmony_ci.. method:: Path.is_dir() 8637db96d56Sopenharmony_ci 8647db96d56Sopenharmony_ci Return ``True`` if the path points to a directory (or a symbolic link 8657db96d56Sopenharmony_ci pointing to a directory), ``False`` if it points to another kind of file. 8667db96d56Sopenharmony_ci 8677db96d56Sopenharmony_ci ``False`` is also returned if the path doesn't exist or is a broken symlink; 8687db96d56Sopenharmony_ci other errors (such as permission errors) are propagated. 8697db96d56Sopenharmony_ci 8707db96d56Sopenharmony_ci 8717db96d56Sopenharmony_ci.. method:: Path.is_file() 8727db96d56Sopenharmony_ci 8737db96d56Sopenharmony_ci Return ``True`` if the path points to a regular file (or a symbolic link 8747db96d56Sopenharmony_ci pointing to a regular file), ``False`` if it points to another kind of file. 8757db96d56Sopenharmony_ci 8767db96d56Sopenharmony_ci ``False`` is also returned if the path doesn't exist or is a broken symlink; 8777db96d56Sopenharmony_ci other errors (such as permission errors) are propagated. 8787db96d56Sopenharmony_ci 8797db96d56Sopenharmony_ci 8807db96d56Sopenharmony_ci.. method:: Path.is_mount() 8817db96d56Sopenharmony_ci 8827db96d56Sopenharmony_ci Return ``True`` if the path is a :dfn:`mount point`: a point in a 8837db96d56Sopenharmony_ci file system where a different file system has been mounted. On POSIX, the 8847db96d56Sopenharmony_ci function checks whether *path*'s parent, :file:`path/..`, is on a different 8857db96d56Sopenharmony_ci device than *path*, or whether :file:`path/..` and *path* point to the same 8867db96d56Sopenharmony_ci i-node on the same device --- this should detect mount points for all Unix 8877db96d56Sopenharmony_ci and POSIX variants. Not implemented on Windows. 8887db96d56Sopenharmony_ci 8897db96d56Sopenharmony_ci .. versionadded:: 3.7 8907db96d56Sopenharmony_ci 8917db96d56Sopenharmony_ci 8927db96d56Sopenharmony_ci.. method:: Path.is_symlink() 8937db96d56Sopenharmony_ci 8947db96d56Sopenharmony_ci Return ``True`` if the path points to a symbolic link, ``False`` otherwise. 8957db96d56Sopenharmony_ci 8967db96d56Sopenharmony_ci ``False`` is also returned if the path doesn't exist; other errors (such 8977db96d56Sopenharmony_ci as permission errors) are propagated. 8987db96d56Sopenharmony_ci 8997db96d56Sopenharmony_ci 9007db96d56Sopenharmony_ci.. method:: Path.is_socket() 9017db96d56Sopenharmony_ci 9027db96d56Sopenharmony_ci Return ``True`` if the path points to a Unix socket (or a symbolic link 9037db96d56Sopenharmony_ci pointing to a Unix socket), ``False`` if it points to another kind of file. 9047db96d56Sopenharmony_ci 9057db96d56Sopenharmony_ci ``False`` is also returned if the path doesn't exist or is a broken symlink; 9067db96d56Sopenharmony_ci other errors (such as permission errors) are propagated. 9077db96d56Sopenharmony_ci 9087db96d56Sopenharmony_ci 9097db96d56Sopenharmony_ci.. method:: Path.is_fifo() 9107db96d56Sopenharmony_ci 9117db96d56Sopenharmony_ci Return ``True`` if the path points to a FIFO (or a symbolic link 9127db96d56Sopenharmony_ci pointing to a FIFO), ``False`` if it points to another kind of file. 9137db96d56Sopenharmony_ci 9147db96d56Sopenharmony_ci ``False`` is also returned if the path doesn't exist or is a broken symlink; 9157db96d56Sopenharmony_ci other errors (such as permission errors) are propagated. 9167db96d56Sopenharmony_ci 9177db96d56Sopenharmony_ci 9187db96d56Sopenharmony_ci.. method:: Path.is_block_device() 9197db96d56Sopenharmony_ci 9207db96d56Sopenharmony_ci Return ``True`` if the path points to a block device (or a symbolic link 9217db96d56Sopenharmony_ci pointing to a block device), ``False`` if it points to another kind of file. 9227db96d56Sopenharmony_ci 9237db96d56Sopenharmony_ci ``False`` is also returned if the path doesn't exist or is a broken symlink; 9247db96d56Sopenharmony_ci other errors (such as permission errors) are propagated. 9257db96d56Sopenharmony_ci 9267db96d56Sopenharmony_ci 9277db96d56Sopenharmony_ci.. method:: Path.is_char_device() 9287db96d56Sopenharmony_ci 9297db96d56Sopenharmony_ci Return ``True`` if the path points to a character device (or a symbolic link 9307db96d56Sopenharmony_ci pointing to a character device), ``False`` if it points to another kind of file. 9317db96d56Sopenharmony_ci 9327db96d56Sopenharmony_ci ``False`` is also returned if the path doesn't exist or is a broken symlink; 9337db96d56Sopenharmony_ci other errors (such as permission errors) are propagated. 9347db96d56Sopenharmony_ci 9357db96d56Sopenharmony_ci 9367db96d56Sopenharmony_ci.. method:: Path.iterdir() 9377db96d56Sopenharmony_ci 9387db96d56Sopenharmony_ci When the path points to a directory, yield path objects of the directory 9397db96d56Sopenharmony_ci contents:: 9407db96d56Sopenharmony_ci 9417db96d56Sopenharmony_ci >>> p = Path('docs') 9427db96d56Sopenharmony_ci >>> for child in p.iterdir(): child 9437db96d56Sopenharmony_ci ... 9447db96d56Sopenharmony_ci PosixPath('docs/conf.py') 9457db96d56Sopenharmony_ci PosixPath('docs/_templates') 9467db96d56Sopenharmony_ci PosixPath('docs/make.bat') 9477db96d56Sopenharmony_ci PosixPath('docs/index.rst') 9487db96d56Sopenharmony_ci PosixPath('docs/_build') 9497db96d56Sopenharmony_ci PosixPath('docs/_static') 9507db96d56Sopenharmony_ci PosixPath('docs/Makefile') 9517db96d56Sopenharmony_ci 9527db96d56Sopenharmony_ci The children are yielded in arbitrary order, and the special entries 9537db96d56Sopenharmony_ci ``'.'`` and ``'..'`` are not included. If a file is removed from or added 9547db96d56Sopenharmony_ci to the directory after creating the iterator, whether a path object for 9557db96d56Sopenharmony_ci that file be included is unspecified. 9567db96d56Sopenharmony_ci 9577db96d56Sopenharmony_ci.. method:: Path.lchmod(mode) 9587db96d56Sopenharmony_ci 9597db96d56Sopenharmony_ci Like :meth:`Path.chmod` but, if the path points to a symbolic link, the 9607db96d56Sopenharmony_ci symbolic link's mode is changed rather than its target's. 9617db96d56Sopenharmony_ci 9627db96d56Sopenharmony_ci 9637db96d56Sopenharmony_ci.. method:: Path.lstat() 9647db96d56Sopenharmony_ci 9657db96d56Sopenharmony_ci Like :meth:`Path.stat` but, if the path points to a symbolic link, return 9667db96d56Sopenharmony_ci the symbolic link's information rather than its target's. 9677db96d56Sopenharmony_ci 9687db96d56Sopenharmony_ci 9697db96d56Sopenharmony_ci.. method:: Path.mkdir(mode=0o777, parents=False, exist_ok=False) 9707db96d56Sopenharmony_ci 9717db96d56Sopenharmony_ci Create a new directory at this given path. If *mode* is given, it is 9727db96d56Sopenharmony_ci combined with the process' ``umask`` value to determine the file mode 9737db96d56Sopenharmony_ci and access flags. If the path already exists, :exc:`FileExistsError` 9747db96d56Sopenharmony_ci is raised. 9757db96d56Sopenharmony_ci 9767db96d56Sopenharmony_ci If *parents* is true, any missing parents of this path are created 9777db96d56Sopenharmony_ci as needed; they are created with the default permissions without taking 9787db96d56Sopenharmony_ci *mode* into account (mimicking the POSIX ``mkdir -p`` command). 9797db96d56Sopenharmony_ci 9807db96d56Sopenharmony_ci If *parents* is false (the default), a missing parent raises 9817db96d56Sopenharmony_ci :exc:`FileNotFoundError`. 9827db96d56Sopenharmony_ci 9837db96d56Sopenharmony_ci If *exist_ok* is false (the default), :exc:`FileExistsError` is 9847db96d56Sopenharmony_ci raised if the target directory already exists. 9857db96d56Sopenharmony_ci 9867db96d56Sopenharmony_ci If *exist_ok* is true, :exc:`FileExistsError` exceptions will be 9877db96d56Sopenharmony_ci ignored (same behavior as the POSIX ``mkdir -p`` command), but only if the 9887db96d56Sopenharmony_ci last path component is not an existing non-directory file. 9897db96d56Sopenharmony_ci 9907db96d56Sopenharmony_ci .. versionchanged:: 3.5 9917db96d56Sopenharmony_ci The *exist_ok* parameter was added. 9927db96d56Sopenharmony_ci 9937db96d56Sopenharmony_ci 9947db96d56Sopenharmony_ci.. method:: Path.open(mode='r', buffering=-1, encoding=None, errors=None, newline=None) 9957db96d56Sopenharmony_ci 9967db96d56Sopenharmony_ci Open the file pointed to by the path, like the built-in :func:`open` 9977db96d56Sopenharmony_ci function does:: 9987db96d56Sopenharmony_ci 9997db96d56Sopenharmony_ci >>> p = Path('setup.py') 10007db96d56Sopenharmony_ci >>> with p.open() as f: 10017db96d56Sopenharmony_ci ... f.readline() 10027db96d56Sopenharmony_ci ... 10037db96d56Sopenharmony_ci '#!/usr/bin/env python3\n' 10047db96d56Sopenharmony_ci 10057db96d56Sopenharmony_ci 10067db96d56Sopenharmony_ci.. method:: Path.owner() 10077db96d56Sopenharmony_ci 10087db96d56Sopenharmony_ci Return the name of the user owning the file. :exc:`KeyError` is raised 10097db96d56Sopenharmony_ci if the file's uid isn't found in the system database. 10107db96d56Sopenharmony_ci 10117db96d56Sopenharmony_ci 10127db96d56Sopenharmony_ci.. method:: Path.read_bytes() 10137db96d56Sopenharmony_ci 10147db96d56Sopenharmony_ci Return the binary contents of the pointed-to file as a bytes object:: 10157db96d56Sopenharmony_ci 10167db96d56Sopenharmony_ci >>> p = Path('my_binary_file') 10177db96d56Sopenharmony_ci >>> p.write_bytes(b'Binary file contents') 10187db96d56Sopenharmony_ci 20 10197db96d56Sopenharmony_ci >>> p.read_bytes() 10207db96d56Sopenharmony_ci b'Binary file contents' 10217db96d56Sopenharmony_ci 10227db96d56Sopenharmony_ci .. versionadded:: 3.5 10237db96d56Sopenharmony_ci 10247db96d56Sopenharmony_ci 10257db96d56Sopenharmony_ci.. method:: Path.read_text(encoding=None, errors=None) 10267db96d56Sopenharmony_ci 10277db96d56Sopenharmony_ci Return the decoded contents of the pointed-to file as a string:: 10287db96d56Sopenharmony_ci 10297db96d56Sopenharmony_ci >>> p = Path('my_text_file') 10307db96d56Sopenharmony_ci >>> p.write_text('Text file contents') 10317db96d56Sopenharmony_ci 18 10327db96d56Sopenharmony_ci >>> p.read_text() 10337db96d56Sopenharmony_ci 'Text file contents' 10347db96d56Sopenharmony_ci 10357db96d56Sopenharmony_ci The file is opened and then closed. The optional parameters have the same 10367db96d56Sopenharmony_ci meaning as in :func:`open`. 10377db96d56Sopenharmony_ci 10387db96d56Sopenharmony_ci .. versionadded:: 3.5 10397db96d56Sopenharmony_ci 10407db96d56Sopenharmony_ci 10417db96d56Sopenharmony_ci.. method:: Path.readlink() 10427db96d56Sopenharmony_ci 10437db96d56Sopenharmony_ci Return the path to which the symbolic link points (as returned by 10447db96d56Sopenharmony_ci :func:`os.readlink`):: 10457db96d56Sopenharmony_ci 10467db96d56Sopenharmony_ci >>> p = Path('mylink') 10477db96d56Sopenharmony_ci >>> p.symlink_to('setup.py') 10487db96d56Sopenharmony_ci >>> p.readlink() 10497db96d56Sopenharmony_ci PosixPath('setup.py') 10507db96d56Sopenharmony_ci 10517db96d56Sopenharmony_ci .. versionadded:: 3.9 10527db96d56Sopenharmony_ci 10537db96d56Sopenharmony_ci 10547db96d56Sopenharmony_ci.. method:: Path.rename(target) 10557db96d56Sopenharmony_ci 10567db96d56Sopenharmony_ci Rename this file or directory to the given *target*, and return a new Path 10577db96d56Sopenharmony_ci instance pointing to *target*. On Unix, if *target* exists and is a file, 10587db96d56Sopenharmony_ci it will be replaced silently if the user has permission. 10597db96d56Sopenharmony_ci On Windows, if *target* exists, :exc:`FileExistsError` will be raised. 10607db96d56Sopenharmony_ci *target* can be either a string or another path object:: 10617db96d56Sopenharmony_ci 10627db96d56Sopenharmony_ci >>> p = Path('foo') 10637db96d56Sopenharmony_ci >>> p.open('w').write('some text') 10647db96d56Sopenharmony_ci 9 10657db96d56Sopenharmony_ci >>> target = Path('bar') 10667db96d56Sopenharmony_ci >>> p.rename(target) 10677db96d56Sopenharmony_ci PosixPath('bar') 10687db96d56Sopenharmony_ci >>> target.open().read() 10697db96d56Sopenharmony_ci 'some text' 10707db96d56Sopenharmony_ci 10717db96d56Sopenharmony_ci The target path may be absolute or relative. Relative paths are interpreted 10727db96d56Sopenharmony_ci relative to the current working directory, *not* the directory of the Path 10737db96d56Sopenharmony_ci object. 10747db96d56Sopenharmony_ci 10757db96d56Sopenharmony_ci It is implemented in terms of :func:`os.rename` and gives the same guarantees. 10767db96d56Sopenharmony_ci 10777db96d56Sopenharmony_ci .. versionchanged:: 3.8 10787db96d56Sopenharmony_ci Added return value, return the new Path instance. 10797db96d56Sopenharmony_ci 10807db96d56Sopenharmony_ci 10817db96d56Sopenharmony_ci.. method:: Path.replace(target) 10827db96d56Sopenharmony_ci 10837db96d56Sopenharmony_ci Rename this file or directory to the given *target*, and return a new Path 10847db96d56Sopenharmony_ci instance pointing to *target*. If *target* points to an existing file or 10857db96d56Sopenharmony_ci empty directory, it will be unconditionally replaced. 10867db96d56Sopenharmony_ci 10877db96d56Sopenharmony_ci The target path may be absolute or relative. Relative paths are interpreted 10887db96d56Sopenharmony_ci relative to the current working directory, *not* the directory of the Path 10897db96d56Sopenharmony_ci object. 10907db96d56Sopenharmony_ci 10917db96d56Sopenharmony_ci .. versionchanged:: 3.8 10927db96d56Sopenharmony_ci Added return value, return the new Path instance. 10937db96d56Sopenharmony_ci 10947db96d56Sopenharmony_ci 10957db96d56Sopenharmony_ci.. method:: Path.absolute() 10967db96d56Sopenharmony_ci 10977db96d56Sopenharmony_ci Make the path absolute, without normalization or resolving symlinks. 10987db96d56Sopenharmony_ci Returns a new path object:: 10997db96d56Sopenharmony_ci 11007db96d56Sopenharmony_ci >>> p = Path('tests') 11017db96d56Sopenharmony_ci >>> p 11027db96d56Sopenharmony_ci PosixPath('tests') 11037db96d56Sopenharmony_ci >>> p.absolute() 11047db96d56Sopenharmony_ci PosixPath('/home/antoine/pathlib/tests') 11057db96d56Sopenharmony_ci 11067db96d56Sopenharmony_ci 11077db96d56Sopenharmony_ci.. method:: Path.resolve(strict=False) 11087db96d56Sopenharmony_ci 11097db96d56Sopenharmony_ci Make the path absolute, resolving any symlinks. A new path object is 11107db96d56Sopenharmony_ci returned:: 11117db96d56Sopenharmony_ci 11127db96d56Sopenharmony_ci >>> p = Path() 11137db96d56Sopenharmony_ci >>> p 11147db96d56Sopenharmony_ci PosixPath('.') 11157db96d56Sopenharmony_ci >>> p.resolve() 11167db96d56Sopenharmony_ci PosixPath('/home/antoine/pathlib') 11177db96d56Sopenharmony_ci 11187db96d56Sopenharmony_ci "``..``" components are also eliminated (this is the only method to do so):: 11197db96d56Sopenharmony_ci 11207db96d56Sopenharmony_ci >>> p = Path('docs/../setup.py') 11217db96d56Sopenharmony_ci >>> p.resolve() 11227db96d56Sopenharmony_ci PosixPath('/home/antoine/pathlib/setup.py') 11237db96d56Sopenharmony_ci 11247db96d56Sopenharmony_ci If the path doesn't exist and *strict* is ``True``, :exc:`FileNotFoundError` 11257db96d56Sopenharmony_ci is raised. If *strict* is ``False``, the path is resolved as far as possible 11267db96d56Sopenharmony_ci and any remainder is appended without checking whether it exists. If an 11277db96d56Sopenharmony_ci infinite loop is encountered along the resolution path, :exc:`RuntimeError` 11287db96d56Sopenharmony_ci is raised. 11297db96d56Sopenharmony_ci 11307db96d56Sopenharmony_ci .. versionadded:: 3.6 11317db96d56Sopenharmony_ci The *strict* argument (pre-3.6 behavior is strict). 11327db96d56Sopenharmony_ci 11337db96d56Sopenharmony_ci.. method:: Path.rglob(pattern) 11347db96d56Sopenharmony_ci 11357db96d56Sopenharmony_ci This is like calling :func:`Path.glob` with "``**/``" added in front of the 11367db96d56Sopenharmony_ci given relative *pattern*:: 11377db96d56Sopenharmony_ci 11387db96d56Sopenharmony_ci >>> sorted(Path().rglob("*.py")) 11397db96d56Sopenharmony_ci [PosixPath('build/lib/pathlib.py'), 11407db96d56Sopenharmony_ci PosixPath('docs/conf.py'), 11417db96d56Sopenharmony_ci PosixPath('pathlib.py'), 11427db96d56Sopenharmony_ci PosixPath('setup.py'), 11437db96d56Sopenharmony_ci PosixPath('test_pathlib.py')] 11447db96d56Sopenharmony_ci 11457db96d56Sopenharmony_ci .. audit-event:: pathlib.Path.rglob self,pattern pathlib.Path.rglob 11467db96d56Sopenharmony_ci 11477db96d56Sopenharmony_ci .. versionchanged:: 3.11 11487db96d56Sopenharmony_ci Return only directories if *pattern* ends with a pathname components 11497db96d56Sopenharmony_ci separator (:data:`~os.sep` or :data:`~os.altsep`). 11507db96d56Sopenharmony_ci 11517db96d56Sopenharmony_ci.. method:: Path.rmdir() 11527db96d56Sopenharmony_ci 11537db96d56Sopenharmony_ci Remove this directory. The directory must be empty. 11547db96d56Sopenharmony_ci 11557db96d56Sopenharmony_ci 11567db96d56Sopenharmony_ci.. method:: Path.samefile(other_path) 11577db96d56Sopenharmony_ci 11587db96d56Sopenharmony_ci Return whether this path points to the same file as *other_path*, which 11597db96d56Sopenharmony_ci can be either a Path object, or a string. The semantics are similar 11607db96d56Sopenharmony_ci to :func:`os.path.samefile` and :func:`os.path.samestat`. 11617db96d56Sopenharmony_ci 11627db96d56Sopenharmony_ci An :exc:`OSError` can be raised if either file cannot be accessed for some 11637db96d56Sopenharmony_ci reason. 11647db96d56Sopenharmony_ci 11657db96d56Sopenharmony_ci :: 11667db96d56Sopenharmony_ci 11677db96d56Sopenharmony_ci >>> p = Path('spam') 11687db96d56Sopenharmony_ci >>> q = Path('eggs') 11697db96d56Sopenharmony_ci >>> p.samefile(q) 11707db96d56Sopenharmony_ci False 11717db96d56Sopenharmony_ci >>> p.samefile('spam') 11727db96d56Sopenharmony_ci True 11737db96d56Sopenharmony_ci 11747db96d56Sopenharmony_ci .. versionadded:: 3.5 11757db96d56Sopenharmony_ci 11767db96d56Sopenharmony_ci 11777db96d56Sopenharmony_ci.. method:: Path.symlink_to(target, target_is_directory=False) 11787db96d56Sopenharmony_ci 11797db96d56Sopenharmony_ci Make this path a symbolic link to *target*. Under Windows, 11807db96d56Sopenharmony_ci *target_is_directory* must be true (default ``False``) if the link's target 11817db96d56Sopenharmony_ci is a directory. Under POSIX, *target_is_directory*'s value is ignored. 11827db96d56Sopenharmony_ci 11837db96d56Sopenharmony_ci :: 11847db96d56Sopenharmony_ci 11857db96d56Sopenharmony_ci >>> p = Path('mylink') 11867db96d56Sopenharmony_ci >>> p.symlink_to('setup.py') 11877db96d56Sopenharmony_ci >>> p.resolve() 11887db96d56Sopenharmony_ci PosixPath('/home/antoine/pathlib/setup.py') 11897db96d56Sopenharmony_ci >>> p.stat().st_size 11907db96d56Sopenharmony_ci 956 11917db96d56Sopenharmony_ci >>> p.lstat().st_size 11927db96d56Sopenharmony_ci 8 11937db96d56Sopenharmony_ci 11947db96d56Sopenharmony_ci .. note:: 11957db96d56Sopenharmony_ci The order of arguments (link, target) is the reverse 11967db96d56Sopenharmony_ci of :func:`os.symlink`'s. 11977db96d56Sopenharmony_ci 11987db96d56Sopenharmony_ci.. method:: Path.hardlink_to(target) 11997db96d56Sopenharmony_ci 12007db96d56Sopenharmony_ci Make this path a hard link to the same file as *target*. 12017db96d56Sopenharmony_ci 12027db96d56Sopenharmony_ci .. note:: 12037db96d56Sopenharmony_ci The order of arguments (link, target) is the reverse 12047db96d56Sopenharmony_ci of :func:`os.link`'s. 12057db96d56Sopenharmony_ci 12067db96d56Sopenharmony_ci .. versionadded:: 3.10 12077db96d56Sopenharmony_ci 12087db96d56Sopenharmony_ci.. method:: Path.link_to(target) 12097db96d56Sopenharmony_ci 12107db96d56Sopenharmony_ci Make *target* a hard link to this path. 12117db96d56Sopenharmony_ci 12127db96d56Sopenharmony_ci .. warning:: 12137db96d56Sopenharmony_ci 12147db96d56Sopenharmony_ci This function does not make this path a hard link to *target*, despite 12157db96d56Sopenharmony_ci the implication of the function and argument names. The argument order 12167db96d56Sopenharmony_ci (target, link) is the reverse of :func:`Path.symlink_to` and 12177db96d56Sopenharmony_ci :func:`Path.hardlink_to`, but matches that of :func:`os.link`. 12187db96d56Sopenharmony_ci 12197db96d56Sopenharmony_ci .. versionadded:: 3.8 12207db96d56Sopenharmony_ci 12217db96d56Sopenharmony_ci .. deprecated:: 3.10 12227db96d56Sopenharmony_ci 12237db96d56Sopenharmony_ci This method is deprecated in favor of :meth:`Path.hardlink_to`, as the 12247db96d56Sopenharmony_ci argument order of :meth:`Path.link_to` does not match that of 12257db96d56Sopenharmony_ci :meth:`Path.symlink_to`. 12267db96d56Sopenharmony_ci 12277db96d56Sopenharmony_ci 12287db96d56Sopenharmony_ci.. method:: Path.touch(mode=0o666, exist_ok=True) 12297db96d56Sopenharmony_ci 12307db96d56Sopenharmony_ci Create a file at this given path. If *mode* is given, it is combined 12317db96d56Sopenharmony_ci with the process' ``umask`` value to determine the file mode and access 12327db96d56Sopenharmony_ci flags. If the file already exists, the function succeeds if *exist_ok* 12337db96d56Sopenharmony_ci is true (and its modification time is updated to the current time), 12347db96d56Sopenharmony_ci otherwise :exc:`FileExistsError` is raised. 12357db96d56Sopenharmony_ci 12367db96d56Sopenharmony_ci 12377db96d56Sopenharmony_ci.. method:: Path.unlink(missing_ok=False) 12387db96d56Sopenharmony_ci 12397db96d56Sopenharmony_ci Remove this file or symbolic link. If the path points to a directory, 12407db96d56Sopenharmony_ci use :func:`Path.rmdir` instead. 12417db96d56Sopenharmony_ci 12427db96d56Sopenharmony_ci If *missing_ok* is false (the default), :exc:`FileNotFoundError` is 12437db96d56Sopenharmony_ci raised if the path does not exist. 12447db96d56Sopenharmony_ci 12457db96d56Sopenharmony_ci If *missing_ok* is true, :exc:`FileNotFoundError` exceptions will be 12467db96d56Sopenharmony_ci ignored (same behavior as the POSIX ``rm -f`` command). 12477db96d56Sopenharmony_ci 12487db96d56Sopenharmony_ci .. versionchanged:: 3.8 12497db96d56Sopenharmony_ci The *missing_ok* parameter was added. 12507db96d56Sopenharmony_ci 12517db96d56Sopenharmony_ci 12527db96d56Sopenharmony_ci.. method:: Path.write_bytes(data) 12537db96d56Sopenharmony_ci 12547db96d56Sopenharmony_ci Open the file pointed to in bytes mode, write *data* to it, and close the 12557db96d56Sopenharmony_ci file:: 12567db96d56Sopenharmony_ci 12577db96d56Sopenharmony_ci >>> p = Path('my_binary_file') 12587db96d56Sopenharmony_ci >>> p.write_bytes(b'Binary file contents') 12597db96d56Sopenharmony_ci 20 12607db96d56Sopenharmony_ci >>> p.read_bytes() 12617db96d56Sopenharmony_ci b'Binary file contents' 12627db96d56Sopenharmony_ci 12637db96d56Sopenharmony_ci An existing file of the same name is overwritten. 12647db96d56Sopenharmony_ci 12657db96d56Sopenharmony_ci .. versionadded:: 3.5 12667db96d56Sopenharmony_ci 12677db96d56Sopenharmony_ci 12687db96d56Sopenharmony_ci.. method:: Path.write_text(data, encoding=None, errors=None, newline=None) 12697db96d56Sopenharmony_ci 12707db96d56Sopenharmony_ci Open the file pointed to in text mode, write *data* to it, and close the 12717db96d56Sopenharmony_ci file:: 12727db96d56Sopenharmony_ci 12737db96d56Sopenharmony_ci >>> p = Path('my_text_file') 12747db96d56Sopenharmony_ci >>> p.write_text('Text file contents') 12757db96d56Sopenharmony_ci 18 12767db96d56Sopenharmony_ci >>> p.read_text() 12777db96d56Sopenharmony_ci 'Text file contents' 12787db96d56Sopenharmony_ci 12797db96d56Sopenharmony_ci An existing file of the same name is overwritten. The optional parameters 12807db96d56Sopenharmony_ci have the same meaning as in :func:`open`. 12817db96d56Sopenharmony_ci 12827db96d56Sopenharmony_ci .. versionadded:: 3.5 12837db96d56Sopenharmony_ci 12847db96d56Sopenharmony_ci .. versionchanged:: 3.10 12857db96d56Sopenharmony_ci The *newline* parameter was added. 12867db96d56Sopenharmony_ci 12877db96d56Sopenharmony_ciCorrespondence to tools in the :mod:`os` module 12887db96d56Sopenharmony_ci----------------------------------------------- 12897db96d56Sopenharmony_ci 12907db96d56Sopenharmony_ciBelow is a table mapping various :mod:`os` functions to their corresponding 12917db96d56Sopenharmony_ci:class:`PurePath`/:class:`Path` equivalent. 12927db96d56Sopenharmony_ci 12937db96d56Sopenharmony_ci.. note:: 12947db96d56Sopenharmony_ci 12957db96d56Sopenharmony_ci Not all pairs of functions/methods below are equivalent. Some of them, 12967db96d56Sopenharmony_ci despite having some overlapping use-cases, have different semantics. They 12977db96d56Sopenharmony_ci include :func:`os.path.abspath` and :meth:`Path.absolute`, 12987db96d56Sopenharmony_ci :func:`os.path.relpath` and :meth:`PurePath.relative_to`. 12997db96d56Sopenharmony_ci 13007db96d56Sopenharmony_ci==================================== ============================== 13017db96d56Sopenharmony_ci:mod:`os` and :mod:`os.path` :mod:`pathlib` 13027db96d56Sopenharmony_ci==================================== ============================== 13037db96d56Sopenharmony_ci:func:`os.path.abspath` :meth:`Path.absolute` [#]_ 13047db96d56Sopenharmony_ci:func:`os.path.realpath` :meth:`Path.resolve` 13057db96d56Sopenharmony_ci:func:`os.chmod` :meth:`Path.chmod` 13067db96d56Sopenharmony_ci:func:`os.mkdir` :meth:`Path.mkdir` 13077db96d56Sopenharmony_ci:func:`os.makedirs` :meth:`Path.mkdir` 13087db96d56Sopenharmony_ci:func:`os.rename` :meth:`Path.rename` 13097db96d56Sopenharmony_ci:func:`os.replace` :meth:`Path.replace` 13107db96d56Sopenharmony_ci:func:`os.rmdir` :meth:`Path.rmdir` 13117db96d56Sopenharmony_ci:func:`os.remove`, :func:`os.unlink` :meth:`Path.unlink` 13127db96d56Sopenharmony_ci:func:`os.getcwd` :func:`Path.cwd` 13137db96d56Sopenharmony_ci:func:`os.path.exists` :meth:`Path.exists` 13147db96d56Sopenharmony_ci:func:`os.path.expanduser` :meth:`Path.expanduser` and 13157db96d56Sopenharmony_ci :meth:`Path.home` 13167db96d56Sopenharmony_ci:func:`os.listdir` :meth:`Path.iterdir` 13177db96d56Sopenharmony_ci:func:`os.path.isdir` :meth:`Path.is_dir` 13187db96d56Sopenharmony_ci:func:`os.path.isfile` :meth:`Path.is_file` 13197db96d56Sopenharmony_ci:func:`os.path.islink` :meth:`Path.is_symlink` 13207db96d56Sopenharmony_ci:func:`os.link` :meth:`Path.hardlink_to` 13217db96d56Sopenharmony_ci:func:`os.symlink` :meth:`Path.symlink_to` 13227db96d56Sopenharmony_ci:func:`os.readlink` :meth:`Path.readlink` 13237db96d56Sopenharmony_ci:func:`os.path.relpath` :meth:`PurePath.relative_to` [#]_ 13247db96d56Sopenharmony_ci:func:`os.stat` :meth:`Path.stat`, 13257db96d56Sopenharmony_ci :meth:`Path.owner`, 13267db96d56Sopenharmony_ci :meth:`Path.group` 13277db96d56Sopenharmony_ci:func:`os.path.isabs` :meth:`PurePath.is_absolute` 13287db96d56Sopenharmony_ci:func:`os.path.join` :func:`PurePath.joinpath` 13297db96d56Sopenharmony_ci:func:`os.path.basename` :attr:`PurePath.name` 13307db96d56Sopenharmony_ci:func:`os.path.dirname` :attr:`PurePath.parent` 13317db96d56Sopenharmony_ci:func:`os.path.samefile` :meth:`Path.samefile` 13327db96d56Sopenharmony_ci:func:`os.path.splitext` :attr:`PurePath.stem` and 13337db96d56Sopenharmony_ci :attr:`PurePath.suffix` 13347db96d56Sopenharmony_ci==================================== ============================== 13357db96d56Sopenharmony_ci 13367db96d56Sopenharmony_ci.. rubric:: Footnotes 13377db96d56Sopenharmony_ci 13387db96d56Sopenharmony_ci.. [#] :func:`os.path.abspath` normalizes the resulting path, which may change its meaning in the presence of symlinks, while :meth:`Path.absolute` does not. 13397db96d56Sopenharmony_ci.. [#] :meth:`PurePath.relative_to` requires ``self`` to be the subpath of the argument, but :func:`os.path.relpath` does not. 1340