Потенциальные ошибки с моей функцией makeValidFilename? - PullRequest
0 голосов
/ 14 декабря 2009

Это вдохновлено «Как сделать правильное имя файла Windows из произвольной строки?» , я написал функцию, которая будет принимать произвольную строку и делать ее действительным именем файла.

Технически моя функция должна быть ответом на этот вопрос, но я хочу убедиться, что я не сделал ничего глупого или что-то упустил, прежде чем публиковать его как ответ.

Я написал это как часть tvnamer - утилиты, которая берет имена телевизионных эпизодов и переименовывает их красиво и последовательно, с эпизодом, извлеченным из http://www.thetvdb.com - в то время как имя файла источника правильный файл, имя серии исправлено, и имя эпизода - так, чтобы оба могли теоретически содержать любые символы. Я не столько беспокоюсь о безопасности, сколько об удобстве и простоте использования - я в основном предотвращаю переименование файлов .some.series - [01x01].avi и «исчезновение» файлов (а не предотвращение злых людей)

Он делает несколько предположений:

  • Файловая система поддерживает имена файлов Unicode. Как HFS +, так и NTFS, что охватит большинство пользователей. Существует также аргумент normalize_unicode для удаления символов Unicode (в tvnamer это устанавливается через XML-файл конфигурации)
  • Платформой является либо Darwin, Linux, а все остальное рассматривается как Windows
  • Имя файла должно быть видимым (не точечный файл, такой как .bashrc) - было бы достаточно просто изменить код, чтобы разрешить .abc форматировать имена файлов, при желании

Вещи, которые я (надеюсь) обработал:

  • Подчеркивание подчеркивания, если имя файла начинается с . (предотвращает исчезновение имен файлов . ..) *
  • Удаление разделителей каталогов: / в Linux и / и : в OS X
  • Удаление недопустимых символов имени файла Windows \/:*?"<>| (в Windows или принудительно с windows_safe=True)
  • Заранее зарезервированные имена файлов с подчеркиванием (COM2 становится _COM2, NUL становится _NUL и т. Д.)
  • Необязательная нормализация данных Unicode, поэтому å становится a и неконвертируемые символы удаляются
  • Усечение имен файлов более 255 символов в Linux / Darwin и 32 символов в Windows

Код и набор тестовых случаев можно найти и поиграть с http://gist.github.com/256270. Код "производства" можно найти в tvnamer / utils.py

Есть ли ошибки в этой функции? Какие условия я пропустил?

1 Ответ

1 голос
/ 24 августа 2010

Я заметил одно замечание: под NTFS некоторые файлы не могут быть созданы в определенных каталогах. НАПРИМЕР. $ Boot в корне

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...