Рекурсивное переименование файлов Python

Я новичок в python, и я пытаюсь создать скрипт python, который может рекурсивно переименовывать каждый файл в каталоге, включая подкаталоги. Но каждый раз, когда я запускаю скрипт, я получаю сообщение об ошибке

OSError: [Errno 2] Нет такого файла или каталога

Каталог содержит несколько текстовых файлов и папку с некоторыми другими файлами.

Кто-нибудь знает, почему это продолжается?

Код:

import os
path = "example path here"
new_filename= ""
i = 0

filenames = os.listdir(path) # is this line needed?
for dir,subdir,listfilename in os.walk(path):
    for filename in listfilename:
        i += 1
        new_filename = 'filename' + str(i)
        src = os.path.join(path, filename)
        dst = os.path.join(path, new_filename)
        os.rename(src, dst)

person user3702643    schedule 14.07.2015    source источник
comment
не могли бы вы предоставить полный пакет трассировки   -  person The6thSense    schedule 14.07.2015


Ответы (1)


Я совершенно уверен, что проблема связана с тем, что вы присоединяете новые пути к переменной «путь», а не к текущему каталогу, возвращаемому из walk.

import os
path = "example path here"
new_filename= "" # This isn't C, we don't need to pre-declare a variable.
i = 0

filenames = os.listdir(path) # is this line needed? # not that I can see, no
for dir,subdir,listfilename in os.walk(path):
    for filename in listfilename:
        i += 1
        new_filename = 'filename' + str(i)
        src = os.path.join(dir, filename) # NOTE CHANGE HERE
        dst = os.path.join(dir, new_filename) # AND HERE
        os.rename(src, dst)

Вы должны прочитать документы для os.walk, я м не уверен, что вы полностью понимаете, что он делает?

Кроме того, не вызывайте переменную dir, это замаскирует встроенную функцию под тем же именем.

Кроме того, вам не нужно предварительно объявлять path вне ваших циклов.

person LexyStardust    schedule 14.07.2015
comment
Спасибо сработало отлично! На всякий случай переименовал каталог в root. И да, еще раз взглянем на документы. Думаю, я тоже немного запутался. Спасибо за помощь! - person user3702643; 14.07.2015
comment
Нет проблем! Пожалуйста, убедитесь, что вы принимаете ответ, когда сможете. - person LexyStardust; 14.07.2015