Create safe filename string

Snippet

def safe_filename(s: str, replacement: str = "_") -> str:
    """
    Convert a string to a safe filename by replacing unsafe characters.

    Args:
        s (str): The input string to be converted.
        replacement (str): The character to replace unsafe characters with. Default is "_".

    Returns:
        str: A safe filename string.
    """

    keep_chars = (" ", ".", "_", "-")
    safe_name = "".join(c if c.isalnum() or c in keep_chars else replacement for c in s)
    safe_name = safe_name.strip().strip(".")
    return safe_name


if __name__ == "__main__":
    test_cases_safe_filename = [
        ("example<file>name.txt", "example_file_name.txt"),
        ("unsafe:/\\|?*name.doc", "unsafe______name.doc"),
        ("normal_filename.pdf", "normal_filename.pdf"),
        ("   leading and trailing spaces   ", "leading and trailing spaces"),
        ("file.name.with.many.dots...", "file.name.with.many.dots"),
        ("control\x00char\x1fname", "control_char_name"),
    ]

    # Test safe_filename function
    print("Testing safe_filename function:")
    for input_str, expected_output in test_cases_safe_filename:
        result = safe_filename(input_str)
        assert result == expected_output, (
            f"Failed for input '{input_str}': got '{result}', expected '{expected_output}'"
        )

    print("\nAll tests passed!")
By xtream1101 Updated 2025-10-15 14:35