Unfortunately, the set of acceptable characters varies by OS and by filesystem.
- Use almost any character in the current code page for a name, including Unicode characters and characters in the extended character set (128–255), except for the following:
- The following reserved characters are not allowed:
< > : " / \ | ? *- Characters whose integer representations are in the range from zero through 31 are not allowed.
- Any other character that the target file system does not allow.
The list of accepted characters can vary depending on the OS and locale of the machine that first formatted the filesystem.
.NET has GetInvalidFileNameChars and GetInvalidPathChars, but I don‘t know how to call those from Python.
Your best bet is probably to either be overly-conservative on all platforms, or to just try creating the file name and handle errors.
import re
re.sub(‘[^\w\-_\. ]‘, ‘_‘, filename)
参考:https://stackoverflow.com/questions/1033424/how-to-remove-bad-path-characters-in-python
import unicodedata import re def slugify(value, allow_unicode=False): """ Taken from https://github.com/django/django/blob/master/django/utils/text.py Convert to ASCII if ‘allow_unicode‘ is False. Convert spaces or repeated dashes to single dashes. Remove characters that aren‘t alphanumerics, underscores, or hyphens. Convert to lowercase. Also strip leading and trailing whitespace, dashes, and underscores. """ value = str(value) if allow_unicode: value = unicodedata.normalize(‘NFKC‘, value) else: value = unicodedata.normalize(‘NFKD‘, value).encode(‘ascii‘, ‘ignore‘).decode(‘ascii‘) value = re.sub(r‘[^\w\s-]‘, ‘‘, value.lower()) return re.sub(r‘[-\s]+‘, ‘-‘, value).strip(‘-_‘)
https://stackoverflow.com/questions/295135/turn-a-string-into-a-valid-filename
How to remove bad path characters in Python?
原文:https://www.cnblogs.com/profesor/p/14631647.html