Ответ 1
К сожалению, набор допустимых символов зависит от ОС и файловой системы.
-
- Используйте почти любой символ на текущей кодовой странице для имени, включая символы и символы Unicode в расширенном наборе символов (128-255), за исключением следующего:
- Запрещены следующие зарезервированные символы:
< > : "/\ |? * - Символы, чьи целые представления находятся в диапазоне от нуля до 31, не допускаются.
- Любой другой символ, который не разрешает целевая файловая система.
- Запрещены следующие зарезервированные символы:
Список принятых символов может варьироваться в зависимости от ОС и локали машины, которая сначала отформатировала файловую систему.
.NET имеет GetInvalidFileNameChars и GetInvalidPathChars, но я не знаю, как вызвать их из Python.
- Используйте почти любой символ на текущей кодовой странице для имени, включая символы и символы Unicode в расширенном наборе символов (128-255), за исключением следующего:
- Mac OS: NUL всегда исключается, "/" исключается из уровня POSIX, ":" исключается из API Apple API
- HFS +: любая последовательность не исключенных символов, которая представляется UTF-16 в спецификации Unicode 2.0
- HFS: любая последовательность неисключенных символов, представленных в MacRoman (по умолчанию) или других кодировках, в зависимости от машины, создавшей файловую систему.
- UFS: то же, что и HFS +
- Linux:
- родные (UNIX-подобные) файловые системы: любая последовательность байтов, исключая NUL и "/"
- FAT, NTFS, другие неродные файловые системы: изменяется
Ваш лучший выбор, вероятно, либо слишком консервативен на всех платформах, либо просто попробуйте создать имя файла и обработать ошибки.