12.4. File Path Modify
12.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)
12.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)
12.4.3. Create Directory Hierarchy
>>> from pathlib import Path
>>>
>>>
>>> path = Path('/tmp/a/b/c')
>>> path.mkdir(parents=True, exist_ok=True)
12.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)
12.4.5. Create File
Touch creates a file
>>> from pathlib import Path
>>>
>>>
>>> file = Path('/tmp/myfile.txt')
>>> file.touch()
12.4.6. Check If Exists
>>> from pathlib import Path
>>>
>>>
>>> file = Path('/tmp/myfile.txt')
>>> file.exists()
True
12.4.7. Is File or Dir
>>> from pathlib import Path
>>>
>>>
>>> file = Path('/tmp/myfile.txt')
>>>
>>> file.is_dir()
False
>>>
>>> file.is_file()
True
12.4.8. Assignments
"""
* Assignment: File Path Exception
* Type: class assignment
* Complexity: easy
* Lines of code: 6 lines
* Time: 3 min
English:
1. Modify `check` function
2. If `filename` exists, return 'Ok'
3. If `filename` does not exist, return 'File not found'
4. Use `Path` from `pathlib`
5. Run doctests - all must succeed
Polish:
1. Zmodyfikuj funkcję `check`
2. Jeżeli `filename` istnieje, zwróć 'Ok'
3. Jeżeli `filename` nie istnieje, zwróć 'File not found'
4. Użyj `Path` z `pathlib`
5. Uruchom doctesty - wszystkie muszą się powieść
Tests:
>>> import sys; sys.tracebacklimit = 0
>>> from inspect import isfunction
>>> assert check is not Ellipsis, \
'Assign your result to function `check`'
>>> assert isfunction(check), \
'Object `check` has invalid type, should be a function'
>>> check(__file__)
'Ok'
>>> check('_notexisting.txt')
'File not found'
"""
from pathlib import Path
# Modify `result` function
# If `filename` exists, return 'Ok'
# If `filename` does not exist, return 'File not found'
# Use `Path` from `pathlib`
# type: Callable[[str], str]
def check(filename: str) -> str:
...
# 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 = ...