Migrating from pathvalidate

translit's sanitize_filename() replaces pathvalidate for filename sanitization use cases.

Quick migration

# Before
from pathvalidate import sanitize_filename

# After
from translit import sanitize_filename

API comparison

pathvalidate translit Notes
sanitize_filename(s) sanitize_filename(s) Same function name
sanitize_filepath(s) Not available translit handles filenames only
validate_filename(s) Not available translit sanitizes rather than validates
validate_filepath(s) Not available
is_valid_filename(s) Not available

Parameter mapping

# pathvalidate — these work directly in translit (compatibility aliases)
sanitize_filename("my<file>.txt", replacement_text="_")  # accepted
sanitize_filename("my<file>.txt", max_len=100)           # accepted

# translit native names
sanitize_filename("my<file>.txt", separator="_")
sanitize_filename("my<file>.txt", max_length=100)

# platform values are lowercase in translit
sanitize_filename("my<file>.txt", platform="windows")  # not "Windows"
pathvalidate parameter translit parameter Notes
replacement_text separator Both accepted — replacement_text maps to separator
platform platform Values are lowercase in translit
max_len max_length Both accepted — max_len maps to max_length
lang New: language-aware transliteration
preserve_extension New: protect file extension during truncation

New features in translit

Unicode transliteration

pathvalidate strips or replaces non-ASCII characters. translit transliterates them:

# pathvalidate
from pathvalidate import sanitize_filename
sanitize_filename("café résumé.pdf")  # => "caf rsm.pdf" (stripped)

# translit
from translit import sanitize_filename
sanitize_filename("café résumé.pdf")  # => "cafe_resume.pdf" (transliterated)

Language-aware filenames

from translit import sanitize_filename

sanitize_filename("Ärger.txt", lang="de")  # => "Aerger.txt"
sanitize_filename("Ärger.txt")             # => "Arger.txt"

Extension preservation

from translit import sanitize_filename

sanitize_filename("very_long_name.pdf", max_length=15, preserve_extension=True)
# => "very_long_.pdf"  (extension preserved)

What's not covered

translit focuses on filename sanitization. pathvalidate also provides:

  • File path sanitization (sanitize_filepath) — translit handles filenames only, not full paths
  • Validation (validate_filename, is_valid_filename) — translit sanitizes rather than validates

If you need path sanitization or validation, you may need to keep pathvalidate for those specific functions.