Имя файла, содержащее возврат каретки в Windows, не распознается Python - PullRequest
0 голосов
/ 08 февраля 2019

Я хотел бы выбрать файл, но имя файла содержит возврат каретки , поэтому .isfile() постоянно возвращает False.Когда я использую .fnmatch(), он печатает имя файла, включая завершающий возврат каретки .

import fnmatch
import os
local_path = 'd:'+os.sep
filename = '1F80813965EDAA4FC5BA44A91E0DBFF1'
local_file = os.path.join(local_path, filename+'\r')

print( os.path.isfile(local_file) ) 
# Returns False

for file in os.listdir(local_path):
    if fnmatch.fnmatch(file, filename+'?'):
        print(repr(file)) 
        # Returns 'd:\\1F80813965EDAA4FC5BA44A91E0DBFF1\r'

В чем здесь проблема?Это винда?Это раздел NTFS?Или функция os.path.join() не понимает '\r'?

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Windows не допускает специальных символов в имени файла :

  • Используйте обратную косую черту () для разделения компонентов пути.Обратная косая черта разделяет имя файла от пути к нему и одно имя каталога от другого имени каталога в пути.Вы не можете использовать обратную косую черту в имени для фактического файла или каталога, потому что это зарезервированный символ, который разделяет имена на компоненты.

  • Используйте любой символ в текущей кодовой странице для имени, включая символы Юникода и символы в расширенном наборе символов (128–255), за исключением следующего:

    • Следующие зарезервированные символы:
      • <(меньше чем) </li>
      • > больше чем)
      • : (двоеточие)
      • "(двойная кавычка)
      • / (косая черта)
      • \ (обратная косая черта)
      • | (вертикальная черта или труба)
      • ?(знак вопроса)
      • * (звездочка)
    • Целочисленное значение ноль, иногда его называют символом ASCII NUL.
    • Символы, чьи целые представления находятся вдиапазон от 1 до 31, за исключением альтернативных потоков данных, где эти символы разрешены.Для получения дополнительной информации о файловых потоках см. Файловые потоки.
    • Любой другой символ, который целевая файловая система не допускает.

Если вы скопировали файл из другой системы, это может быть проблемой.Если вам нужно использовать этот файл в Windows, вам, вероятно, придется переименовать его перед копированием.

0 голосов
/ 08 февраля 2019

В вашем коде следующая строка создает путь к файлу.Вы можете попробовать удалить \r в нем.

local_file = os.path.join(local_path, filename)
...