2016-08-11 137 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

你的代碼是如何表現VS你期待什麼? – 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,文件名),你可以迭代。

+0

雖然真的我不認爲這回答了op的問題......(我不認爲他想遞歸到子文件夾等) –

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)