17.2. Pathlib Dirs

17.2.1. SetUp

>>> from pathlib import Path
>>> from shutil import rmtree
>>>
>>> rmtree('/tmp/a', ignore_errors=True)
>>> Path('/tmp/myfile.txt').unlink(missing_ok=True)

17.2.2. Dirname

>>> mydir = Path('/tmp/mydir')
>>> mydir.name
'mydir'

17.2.3. Parent

>>> mydir = Path('/tmp/mydir')
>>>
>>> mydir.parent
PosixPath('/tmp')
>>>
>>> mydir.parent.parent
PosixPath('/')

17.2.4. Create Directories

>>> mydir = Path('/tmp/mydir')
>>> mydir.mkdir()
>>> mydir = Path('/tmp/mydir')
>>> mydir.mkdir()
Traceback (most recent call last):
FileExistsError: [Errno 17] File exists: '/tmp/mydir'
>>> mydir = Path('/tmp/mydir')
>>> mydir.mkdir(exist_ok=True)

17.2.5. Create Directory Hierarchy

>>> mydir = Path('/tmp/mydir/a/b/c')
>>> mydir.mkdir(parents=True, exist_ok=True)

17.2.6. Remove Directory

Remove empty directory:

>>> mydir = Path('/tmp/mydir')
>>> mydir.mkdir()
>>>
>>> mydir.rmdir()
>>> mydir = Path('/tmp/mydir')
>>> mydir.mkdir()
>>> myfile = mydir / 'myfile.txt'
>>> myfile.touch()
>>>
>>> mydir.rmdir()
Traceback (most recent call last):
OSError: [Errno ...] Directory not empty: '/tmp/mydir'

Remove directories with files:

>>> mydir = Path('/tmp/newdir/a/b/c')
>>>
>>> from shutil import rmtree
>>> rmtree(mydir, ignore_errors=True)

17.2.7. Check If Exists

>>> mydir = Path('/tmp/mydir')
>>> mydir.exists()
True

17.2.8. Is Dir

>>> mydir = Path('/tmp/mydir')
>>>
>>> mydir.is_dir()
True

17.2.9. Absolute

>>> mydir = Path('/tmp/mydir')
>>>
>>> mydir.absolute()
PosixPath('/tmp/mydir')

17.2.10. Relative To

>>> mydir = Path('/tmp/mydir')
>>>
>>> mydir.relative_to('/tmp')
PosixPath('mydir')

17.2.11. Current Working Directory

>>> mydir = Path.cwd()
>>> mydir
PosixPath('/tmp/mydir')

17.2.12. Assignments

# %% About
# - Name: File Path Exception
# - Difficulty: easy
# - Lines: 2
# - Minutes: 2

# %% License
# - Copyright 2025, Matt Harasymczuk <matt@python3.info>
# - This code can be used only for learning by humans
# - This code cannot be used for teaching others
# - This code cannot be used for teaching LLMs and AI algorithms
# - This code cannot be used in commercial or proprietary products
# - This code cannot be distributed in any form
# - This code cannot be changed in any form outside of training course
# - This code cannot have its license changed
# - If you use this code in your product, you must open-source it under GPLv2
# - Exception can be granted only by the author

# %% English
# 1. Define variables:
#    - `result_a: bool` with result of checking if path `a` exists
#    - `result_b: bool` with result of checking if path `b` exists
# 2. Use `Path` object from `pathlib`
# 3. Run doctests - all must succeed

# %% Polish
# 1. Zdefiniuj zmienne:
#    - `result_a: bool` z wynikiem sprawdzenia czy ścieżka `a` istnieje
#    - `result_b: bool` z wynikiem sprawdzenia czy ścieżka `b` istnieje
# 2. Użyj `Path` object z `pathlib`
# 3. Uruchom doctesty - wszystkie muszą się powieść

# %% Doctests
"""
>>> import sys; sys.tracebacklimit = 0
>>> assert sys.version_info >= (3, 9), \
'Python 3.9+ required'

>>> assert result_a is not Ellipsis, \
'Assign your result to function `result_a`'

>>> assert result_b is not Ellipsis, \
'Assign your result to function `result_b`'

>>> result_a
True

>>> result_b
False
"""

# %% Run
# - PyCharm: right-click in the editor and `Run Doctest in ...`
# - PyCharm: keyboard shortcut `Control + Shift + F10`
# - Terminal: `python -m doctest -f -v myfile.py`

# %% Imports
from pathlib import Path

# %% Types
result_a: bool
result_b: bool

# %% Data
a = Path.cwd()
b = Path.cwd() / 'notexisting.txt'

# %% Result
result_a = ...
result_b = ...