2016-08-11 4 views
0

Я пытаюсь пройти через множество папок и перейти к каждому из них и переименовать определенные файлы в разные имена. Я застрял на петле через часть папок.Python цикл через папки и переименовать файлы

Моя файловая система выглядит следующим образом:

Root Directory 
Folder 
    File1 
    File2 
    File3 
Folder 
    File1 
    File2 
    File3 

код у меня есть:

os.chdir(rootDir) 

for folder in os.listdir(): 
    print(folder) 
    os.chdir(rootDir + 'folder') 
    for f in os.listdir(): 
     print(f) 
    os.chdir(rootDir) 

Так что в моем сознании он будет идти по папкам затем войти в папку и список файлов внутри затем вернитесь в корневой каталог

+0

Как ваш код ведет себя против того, что вы ожидали? – Michael

ответ

1

Посмотрите os.walk

import os 
for dir, subdirs, files in os.walk("."): 
    for f in files: 
     f_new = f + 'bak' 
     os.rename(os.path.join(root, f), os.path.join(root, f_new)) 
+0

Обратите внимание, что это будет рекурсивно проходить через все дочерние подпапки (это может или не может быть тем, что хочет OP ... твердый ответ все равно) –

1

Вам необходимо os.walk. Он возвращает 3-кортеж (dirpath, dirnames, filenames), который вы можете повторить.

+0

в то время как правда, я не думаю, что это отвечает на вопрос о ... (я не думаю, что он хочет рекурсировать во вложенные папки и т. Д.) –

0
def change_files(root_dir,target_files,rename_fn): 
    for fname in os.listdir(root_path): 
     path = os.path.join(root_path,fname) 
     if fname in target_files: 
      new_name = rename_fn(fname) 
      os.move(path,os.path.join(root_path,new_name) 

def rename_file(old_name): 
    return old_name.replace("txt","log") 

change_files("/home/target/dir",["File1.txt","File2.txt"],rename_file)