python 中确保字符串适合作为文件名的优雅方式?

Elegant way in python to make sure a string is suitable as a filename?

我想使用用户提供的字符串作为导出文件名,但必须确保我的系统允许该字符串作为文件名。在我这边,可以用例如替换任何禁止的字符。 '_'。

在这里我找到了一个list of forbidden characters for filenames

使用 str.replace() 函数应该很容易,我只是想知道是否已经有一些东西可以做到这一点,甚至可能考虑到 OS 我在做什么。

pathvalidate is a Python library to sanitize/validate a string such as filenames/file-paths/etc.

此库提供了两种用于验证路径的实用程序:

import sys
from pathvalidate import ValidationError, validate_filename

try:
    validate_filename("fi:l*e/p\"a?t>h|.t<xt")
except ValidationError as e:
    print("{}\n".format(e), file=sys.stderr)

以及清理路径的实用程序:

from pathvalidate import sanitize_filename

fname = "fi:l*e/p\"a?t>h|.t<xt"
print("{} -> {}".format(fname, sanitize_filename(fname)))

更好的解决方案可能是您使用生成的文件名在本地存储文件,这些文件名保证唯一且文件系统安全(例如,任何 UUID 生成器都可以)。维护一个在原始文件名和 UUID 之间映射的简单数据库,供以后使用。