14.4. File Path Modify

14.4.1. SetUp

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

14.4.2. Create Directories

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

14.4.3. Create Directory Hierarchy

>>> from pathlib import Path
>>>
>>>
>>> path = Path('/tmp/a/b/c')
>>> path.mkdir(parents=True, exist_ok=True)

14.4.4. Delete directory

Works only with empty directories:

>>> from pathlib import Path
>>>
>>>
>>> path = Path('/tmp/a')
>>> path.rmdir()  
Traceback (most recent call last):
OSError: [Errno ...] Directory not empty: '/tmp/a'

Remove directories with files:

>>> from shutil import rmtree
>>>
>>>
>>> path = '/tmp/a'
>>> rmtree(path, ignore_errors=True)

14.4.5. Create File

  • Touch creates a file

>>> from pathlib import Path
>>>
>>>
>>> file = Path('/tmp/myfile.txt')
>>> file.touch()

14.4.6. Check If Exists

>>> from pathlib import Path
>>>
>>>
>>> file = Path('/tmp/myfile.txt')
>>> file.exists()
True

14.4.7. Is File or Dir

>>> from pathlib import Path
>>>
>>>
>>> file = Path('/tmp/myfile.txt')
>>>
>>> file.is_dir()
False
>>>
>>> file.is_file()
True

14.4.8. Assignments

"""
* Assignment: File Path Exception
* Type: class assignment
* Complexity: easy
* Lines of code: 2 lines
* Time: 2 min

English:
    TODO: ...

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

Tests:
    >>> import sys; sys.tracebacklimit = 0
    >>> from inspect import isfunction

    >>> 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
"""

from pathlib import Path


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


result_a = ...
result_b = ...


# TODO: exists()
# TODO: is_file()
# TODO: is_dir()
# TODO: is_symlink()

"""
* Assignment: File Path Abspath
* Type: class assignment
* Complexity: easy
* Lines of code: 3 lines
* Time: 5 min

English:
    1. Define `path` with converted `filename` to absolute path
    2. To `result` assgin string:
        a. `file` if path is a file
        b. `directory` if path is a directory
        c. `missing` if path does not exist
    3. Run doctests - all must succeed

Polish:
    1. Zdefiniuj `path` z przekonwertowym `filename` do ścieżki bezwzględnej
    2. Do `result` przypisz ciąg znaków:
        a. `file` jeżeli ścieżka jest plikiem
        b. `directory` jeżeli ścieżka jest katalogiem
        c. `missing` jeżeli ścieżka nie istnieje
    3. Uruchom doctesty - wszystkie muszą się powieść

Hints:
    * `from pathlib import Path`
    * `Path.cwd()`
    * `Path()`
    * `Path.is_dir()`
    * `Path.is_file()`
    * `Path.exists()`

Tests:
    >>> import sys; sys.tracebacklimit = 0

    >>> assert isinstance(result, str), \
    'Result must be a str with: `file`, `directory` or `missing`'

    >>> assert isinstance(abspath, Path), \
    'Use Path class from pathlib library to create a filepath'

    >>> current_directory = Path.cwd()
    >>> assert str(current_directory) in str(abspath), \
    'File Path must be absolute, check if you have current directory in path'

    >>> result
    'missing'
"""

from pathlib import Path


FILENAME = 'myfile.txt'

# Absolute path to FILENAME
# type: Path
abspath = ...

# File, directory or missing
# type: str
result = ...

# TODO: exists()
# TODO: is_file()
# TODO: is_dir()
# TODO: is_symlink()

"""
* Assignment: File Path Abspath
* Type: class assignment
* Complexity: easy
* Lines of code: 3 lines
* Time: 5 min

English:
    1. Define `path` with converted `filename` to absolute path
    2. To `result` assgin string:
        a. `file` if path is a file
        b. `directory` if path is a directory
        c. `missing` if path does not exist
    3. Run doctests - all must succeed

Polish:
    1. Zdefiniuj `path` z przekonwertowym `filename` do ścieżki bezwzględnej
    2. Do `result` przypisz ciąg znaków:
        a. `file` jeżeli ścieżka jest plikiem
        b. `directory` jeżeli ścieżka jest katalogiem
        c. `missing` jeżeli ścieżka nie istnieje
    3. Uruchom doctesty - wszystkie muszą się powieść

Hints:
    * `from pathlib import Path`
    * `Path.cwd()`
    * `Path()`
    * `Path.is_dir()`
    * `Path.is_file()`
    * `Path.exists()`

Tests:
    >>> import sys; sys.tracebacklimit = 0

    >>> assert isinstance(result, str), \
    'Result must be a str with: `file`, `directory` or `missing`'

    >>> assert isinstance(abspath, Path), \
    'Use Path class from pathlib library to create a filepath'

    >>> current_directory = Path.cwd()
    >>> assert str(current_directory) in str(abspath), \
    'File Path must be absolute, check if you have current directory in path'

    >>> result
    'missing'
"""

from pathlib import Path


FILENAME = 'myfile.txt'

# Absolute path to FILENAME
# type: Path
abspath = ...

# File, directory or missing
# type: str
result = ...