Почему мой os.rename не работает? - PullRequest
1 голос
/ 30 марта 2010

Я пытаюсь переименовать некоторые файлы, но получаю странную ошибку *. Когда я запускаю это:

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 не существует, потому что это было бы глупо. Есть намеки?

Спасибо! Alex

* Разве они не все?

Ответы [ 4 ]

1 голос
/ 30 марта 2010

Я не вижу полной внутренней работы вашего кода, поэтому вот мои два цента стоят:

Ваш newFilePath может содержать каталог, который не существует. Если это так, то в зависимости от вашей операционной системы ваша программа не может создать файл в каталоге, который не существует. Это может быть вашей ошибкой.

Надеюсь, это поможет

1 голос
/ 30 марта 2010

Вы все равно можете получить исключение, если попытаетесь скопировать в несуществующий каталог.

0 голосов
/ 28 апреля 2015

У меня была такая же ошибка, когда мое новое имя файла содержало прямые косые черты, которые путают с разделителями каталогов в Unix и Linux. Например, переименование файла в «4/27 / 2015.txt» приводит к каталогу, который не существует, и приводит к «Нет такого файла или каталога». Вы можете решить эту проблему, заменив косую черту любым другим допустимым символом.

0 голосов
/ 21 декабря 2012

Кажется, что плакат решил его проблему, но у меня был тот же симптом, и причина оказалась другой. Файл, который я пытался переименовать, только что был создан при вызове подпроцесса в предыдущей строке. Если я снова запустил свой сценарий, у меня не было проблемы с переименованием, поскольку файл был создан при предыдущем запуске, но если я удалил ранее созданный файл, у меня возникла бы такая же проблема с переименованием. Похоже, что os.rename вызывали до того, как подпроцесс был завершен, и поэтому файл, который нужно переименовать, еще не существовал. Я вставил os.wait () после вызова подпроцесса, и я считаю, что это решило мою проблему.

...