Python в Windows 10: os.rename() не может найти файл, который os.path.exists() находит?

Мне интересно os.rename(): Даже если os.path.exists() говорит, что файл существует, os.rename() говорит, что не может его найти. Вот фрагмент кода:

        try:
            if (os.path.exists(sourcePath)):
                print('Safe: %s does exist!' % sourcePath)
            os.rename (sourcePath, newPath)
        except Exception as e:
            print('Error renaming "%s":' % sourcePath)
            raise e

Запуск этого файла с именем Y:\home\Paul\PaulsBilder\images\..\import\batch0\2012-05 Neuruppin\12-05 - 0 2.JPG дал следующий вывод:

Safe: Y:\home\Paul\PaulsBilder\images\..\import\batch0\2012-05  Neuruppin\12-05 - 0 2.JPG does exist!
Error renaming "Y:\home\Paul\PaulsBilder\images\..\import\batch0\2012-05  Neuruppin\12-05 - 0 2.JPG":
Traceback (most recent call last):
 :
WindowsError: [Error 3] Das System kann den angegebenen Pfad nicht finden

(Немецкий Windows: "Система не может найти указанный путь.") Я использовал этот фрагмент некоторое время без проблем, но, вероятно, никогда не для имен файлов с пробелами... Но тогда, когда я заменяю пробелы подчеркиваниями, имя файла все еще не может быть найдено.

Что-то еще должно быть не так, но что?

РЕДАКТИРОВАТЬ: удаление /../ компонент (оборачивая os.normpath() вокруг это) не помогает.

1 ответ

Решение

Большое спасибо, Skycc, вы совершенно правы: ошибка произошла, потому что каталог с новым путем не существует. Дурак я.

Это работает - убедитесь, что os.makedirs() вызывается только один раз:

        try:
            if (os.path.exists(sourcePath)):
                print('Safe: %s does exist!' % sourcePath)
            (head, tail) = os.path.split(newPath)  # @UnusedVariable
            if (not os.path.exists(head)):
                os.makedirs(head)
            os.rename(sourcePath, newPath)
        except Exception as e:
            print('Error renaming "%s" to "%s":' % (sourcePath, newPath))
            raise e
Другие вопросы по тегам