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