Проблема в том, что вы дали своей функции имя rename
, но внутри функции вы также пытаетесь использовать имя rename
для вызова os.rename
.В результате os.rename
никогда не вызывается.Вместо этого ваша функция делает рекурсивный вызов самому себе со старыми и новыми именами файлов в качестве аргументов.
Этот рекурсивный вызов ничего не делает, потому что walk(source)
ничего не возвращает при передаче имени файла.Конечным результатом является программа, которая корректно просматривает старое дерево каталогов, но никогда ничего не делает с файлами, найденными в этом дереве.
Чтобы исправить, присвойте своей функции другое имя, которое не конфликтует с os.rename
.Может быть, что-то вроде rename_in_tree
.В качестве альтернативы, импортируйте os.rename
с именем, отличным от rename
(from os import rename as os_rename
), и вызывайте его через это новое имя внутри вашей функции.
Я не представляю, как это работает в ipython
.Обработчики REPL иногда делают странные вещи с именами областей, но кажется странным, что он каким-то образом вызовет os.rename
вместо того, чтобы делать рекурсивный вызов вашей функции.