30 lines
749 B
Python
30 lines
749 B
Python
|
import os
|
||
|
from typing import Union
|
||
|
|
||
|
_Path = Union[str, os.PathLike]
|
||
|
|
||
|
|
||
|
def ensure_directory(path):
|
||
|
"""Ensure that the parent directory of `path` exists"""
|
||
|
dirname = os.path.dirname(path)
|
||
|
os.makedirs(dirname, exist_ok=True)
|
||
|
|
||
|
|
||
|
def same_path(p1: _Path, p2: _Path) -> bool:
|
||
|
"""Differs from os.path.samefile because it does not require paths to exist.
|
||
|
Purely string based (no comparison between i-nodes).
|
||
|
>>> same_path("a/b", "./a/b")
|
||
|
True
|
||
|
>>> same_path("a/b", "a/./b")
|
||
|
True
|
||
|
>>> same_path("a/b", "././a/b")
|
||
|
True
|
||
|
>>> same_path("a/b", "./a/b/c/..")
|
||
|
True
|
||
|
>>> same_path("a/b", "../a/b/c")
|
||
|
False
|
||
|
>>> same_path("a", "a/b")
|
||
|
False
|
||
|
"""
|
||
|
return os.path.normpath(p1) == os.path.normpath(p2)
|