Ошибка os.rename «Система не может найти указанный путь»

#python #batch-rename

#python #пакетное переименование

Вопрос:

Подобные вопросы уже задавались по этому поводу в SO, и я действительно получил этот код из сообщения здесь, но у меня возникли проблемы с отладкой этой ошибки.

 import os

paths = (os.path.join(root, filename)
        for root, _, filenames in os.walk(r'C:UserskevinDiamond Line JPEGSDiamond Line JPEGS')
        for filename in filenames)

for path in paths:
    # the '#' in the example below will be replaced by the '-' in the filenames in the directory
    newname = path.replace(' ', '_')
    if newname != path:
        print(path)
        print(newname)
        os.rename(path, newname)
 

Когда я использую os.rename(path,path) , это работает, поэтому я знаю, что проблема должна быть в newname и, скорее всего, в моем непонимании того, как os.rename это работает. Он не считает, что newname существует, о чем свидетельствует следующая ошибка:

 [WinError 3] The system cannot find the path specified: 'C:\Users\kevin\Diamond Line JPEGS\Diamond Line JPEGS\Test 01.jpg' -> 'C:\Users\kevin\Diamond_Line_JPEGS\Diamond_Line_JPEGS\Test_01.jpg'
 

Я не думал, что новое имя каталога должно «существовать», чтобы вы могли его переименовать, поэтому я в замешательстве. Я прочитал документацию и до сих пор не понимаю, почему она терпит неудачу. Файл Python, который я использую, находится в той же папке (хотя я не думаю, что это должно иметь значение здесь).

Ответ №1:

используйте os.renames вместо os.rename. проблема в том, что os.rename изменяет только имя самого верхнего каталога, поэтому в вашем случае он ищет «Test 01.jpg » внутри «C:UserskevinDiamond_Line_JPEGSDiamond_Line_JPEGS » которого не существует.

Комментарии:

1. Большое вам спасибо. Я не понимал, что это также переименовывает имена папок (следовало быть более осторожным). Был бы я прав, говоря, что если бы в именах папок не было пробелов, то os.rename сработал бы? Еще раз, большое вам спасибо.

2. Я думаю, да. Я предполагаю, что это сработало для вас, поэтому я рад, что помог.