5.5. Tips

5.5.1. Sanitize dot-files or dot-directories

When you process filenames or filepaths containing . or .. with the sanitize_filename function or the sanitize_filepath function, by default, sanitize_filename does nothing, and sanitize_filepath normalizes the filepaths:

print(sanitize_filename("."))
print(sanitize_filepath("hoge/./foo"))
.
hoge/foo

If you would like to replace . and .. like other reserved words, you need to specify the arguments as follows:

from pathvalidate import sanitize_filepath, sanitize_filename
from pathvalidate.error import ValidationError


def always_add_trailing_underscore(e: ValidationError) -> str:
    if e.reusable_name:
        return e.reserved_name

    return f"{e.reserved_name}_"


print(
    sanitize_filename(
        ".",
        reserved_name_handler=always_add_trailing_underscore,
        additional_reserved_names=[".", ".."],
    )
)

print(
    sanitize_filepath(
        "hoge/./foo",
        normalize=False,
        reserved_name_handler=always_add_trailing_underscore,
        additional_reserved_names=[".", ".."],
    )
)
._
hoge/._/foo