Как удалить символы плохого пути в Python?

Каков самый перекрестный способ удаления неправильных символов пути (например, «\» или «:» в Windows) в Python?

Решение

Поскольку, похоже, нет идеального решения, я решил быть относительно ограничительным и использовал следующий код:

def remove(value, deletechars): for c in deletechars: value = value.replace(c,'') return value; print remove(filename, '\/:*?"<>|') 

  • Текст Python для речи на Macintosh
  • Что означает этот код: «print >> sys.stderr»
  • Ошибка при установке модуля rpy2 в Python с помощью easy_install
  • Как периодически запускать функцию в python
  • Как быстро отладить неправильный скрипт в Python без pdb?
  • sklearn логистическая регрессия с неуравновешенными классами
  • Не удалось правильно записать извлеченные элементы в файл excel?
  • Печатать строку по построенной линии (имитировать контурные надписи)
  • 4 Solutions collect form web for “Как удалить символы плохого пути в Python?”

    К сожалению, набор допустимых символов зависит от ОС и файловой системы.

    • Windows :

      • Используйте почти любой символ на текущей кодовой странице для имени, включая символы Юникода и символы в расширенном наборе символов (128-255), за исключением следующего:
        • Следующие зарезервированные символы не допускаются:
          <>: "/ \ |? *
        • Символы, чьи целые представления находятся в диапазоне от нуля до 31, недопустимы.
        • Любой другой символ, который не разрешает целевая файловая система.

      Список принятых символов может варьироваться в зависимости от ОС и локали машины, которая сначала отформатировала файловую систему.

      .NET имеет GetInvalidFileNameChars и GetInvalidPathChars , но я не знаю, как их вызвать из Python.

    • Mac OS: NUL всегда исключается, «/» исключается из уровня POSIX, «:» исключается из API Apple API
      • HFS +: любая последовательность не исключенных символов, которая представляется UTF-16 в спецификации Unicode 2.0
      • HFS: любая последовательность не исключенных символов, представленных в MacRoman (по умолчанию) или другие кодировки, в зависимости от машины, создавшей файловую систему
      • UFS: то же, что и HFS +
    • Linux:
      • (UNIX-подобные) файловые системы: любая последовательность байтов, исключая NUL и "/"
      • FAT, NTFS, другие неродные файловые системы: изменяется

    Ваш лучший выбор, вероятно, либо слишком консервативен на всех платформах, либо просто попробуйте создать имя файла и обработать ошибки.

    Я думаю, что самый безопасный подход здесь – просто заменить любые подозрительные персонажи. Итак, я думаю, вы можете просто заменить (или избавиться) все, что не является буквенно-цифровым, -, _, пробелом или периодом. И вот как вы это делаете:

     import re re.sub('[^\w\-_\. ]', '_', filename) 

    Вышеизложенное избегает каждого символа, который не является буквой, '_' , '-' , '.' или пробел с '_' . Итак, если вы смотрите на весь путь, вам также нужно будет бросить os.sep в список утвержденных символов.

    Вот несколько примеров:

     In [27]: re.sub('[^\w\-_\. ]', '_', 'some\\*-file._n\\\\ame') Out[27]: 'some__-file._n__ame' 

    Если вы используете python, попробуйте os.path, чтобы избежать проблем с кросс-платформой с помощью путей.

    Этот символ находится в os.sep , он будет «\» или «:», в зависимости от того, в какой системе вы находитесь.

    Python - лучший язык программирования в мире.