2017-08-16 147 views
2

我正在嘗試完成清理其文件組織系統的工作的腳本。我的腳本的最後部分需要進入給定目錄中的所有文件夾,並將每個文件夾中的所有文件移動到目錄中。例如:將文件夾中的文件移動到頂層目錄

import os 
path = 'C:/User/Tom/Documents' 
folders = os.listdir(path) 
print(folders) 

比方說文件夾結構是這樣的:

Documents 
[________ Folder A  
..................[_________ File 1 
..................[_________ File 2 
[________ Folder B 
..................[_________ File 3 
..................[_________ File 4 
[________ Folder C 
..................[_________ File 5 
..................[_________ File 6 
..................[_________ File 7 

我的目標是通過移動所有的文件不知何故進入每個文件夾下的「文件」,空出來的文件夾達而不必輸入文件夾名或文件名一個層次是在看起來像這樣的文件路徑:

Documents 
[________ Folder A  
[_________ File 1 
[_________ File 2 
[________ Folder B 
[_________ File 3 
[_________ File 4 
[________ Folder C 
[_________ File 5 
[_________ File 6 
[_________ File 7 

我新來的Python和我就如何有效地做到這一點只會想到應該輸入很多進入每個文件夾目錄的代碼,並輸入shutil.move()。然而,這對我的應用程序來說不起作用,因爲腳本需要能夠使用Y文件量來完成X個文件夾的任務,而不必輸入每個文件夾路徑。

我想要一個有效的方式,我可以通過我的'文件夾'列表循環,只需將文件移出路徑的目錄中的任何意見。
對不起,很長的文章,我只是想盡可能詳細瞭解我的問題,謝謝!

+0

你想清空文件夾並將文件上移一層? –

+0

@cᴏʟᴅsᴘᴇᴇᴅ是的,可以循環訪問給定目錄中的所有文件夾,並將它們內的文件移動一層! – Bkal05

+0

我在這裏找到了類似的答案。這可能有幫助。 – Emma

回答

1

我會推薦使用os.walk進行遞歸自底向上遍歷,並相應地移動文件。

import os 
import shutil 
doc_path = 'C:/User/Tom/Documents' 

for root, dirs, files in os.walk(doc_path, topdown=False): 
    for file in files: 
     try: 
      shutil.move(os.path.join(root, file), doc_path) 
     except OSError: 
      pass 

這會將所有內容移動到頂層目錄。

+0

我添加了導入shutil,但是我試着用基本的3文件夾佈局和每個隨機文件。我得到這個錯誤:TypeError:join()參數必須是str或字節,而不是'list'。任何想法如何解決這個問題?謝謝! – Bkal05

+1

@ Bkal05我的錯誤。現在就試試? –

+1

@COLDSPEED啊是的加入第二個for循環將列表變成單獨的字符串,這是有道理的!感謝您的幫助,我非常感謝! – Bkal05

相關問題