Почему мой os.rename не работает?
Вопрос
Я пытаюсь переименовать некоторые файлы, но получаю непонятную ошибку*.Когда я запускаю это:
if os.path.isfile(fullPath):
print 'fmf exists'
print fullPath
print newFilePath
os.rename(fullPath,newFilePath)
Я получаю следующую ошибку:
fmf exists
(correct fullPath)
(correct newFilePath, ie. destination)
Traceback (most recent call last):
File "whatever.py", line 374, in ?
os.rename(fullPath,newFilePath)
OSError: [Errno 2] No such file or directory
Так как я знать что файл по адресу FullPath существует, меня сбивает с толку эта ошибка.Конечно, newFilePath не существует, потому что это было бы глупо.Есть какие-нибудь подсказки?
Спасибо!Алекс
*Разве они не все?
Решение
Вы все равно можете получить исключение, если попытаетесь скопировать в несуществующий каталог.
Другие советы
Я не вижу всей внутренней работы вашего кода, так что вот мои два цента:
Ваш newFilePath может содержать несуществующий каталог.Если это так, то в зависимости от вашей операционной системы ваша программа не сможет создать файл в несуществующем каталоге.Это может быть вашей ошибкой.
Надеюсь это поможет
Кажется, что плакат решил его проблему, но у меня был тот же симптом, а причина оказалась другой.Файл, который я пытался переименовать, только что был создан в вызове подпроцесса в предыдущей строке.Если бы я запустил свой сценарий еще раз, у меня не возникло бы проблемы с переименованием, поскольку файл был создан при предыдущем запуске, но если бы я удалил ранее созданный файл, у меня возникла бы та же проблема с переименованием.Похоже, что os.rename вызывался до завершения подпроцесса, и поэтому файл, который нужно переименовать, еще не существовал.Я вставил os.wait() после вызова подпроцесса и считаю, что это решило мою проблему.
У меня была такая же ошибка, когда мое новое имя файла содержало косую черту, которую путают с разделителями каталогов в Unix и Linux.Например, переименование файла в «27.04.2015.txt» приводит к созданию несуществующего каталога и приводит к сообщению «Нет такого файла или каталога».Вы можете решить эту проблему, заменив косую черту любым другим приемлемым символом.