#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. Я думаю, да. Я предполагаю, что это сработало для вас, поэтому я рад, что помог.