2017-02-27 110 views
0

我正在使用下面的代碼,它只是重新開始,如果我讓它永遠運行。我試圖讓它跳過已存在的文件,並在所有文件被複制時停止。如何保留已複製的文件不被複制?

import os 
import shutil 

source_dir = r"D:\\Tibi" 
target_dir = r"D:\\fileSave/" 
extensions = (".mp4", ".CR2") 

while True: 
    try: 
     for directory, _, file_names in os.walk(source_dir): 
      for file_name in file_names: 
       if file_name.endswith(extensions): 
        source_path = os.path.join(directory, file_name) 
        target_path = os.path.join(target_dir, file_name) 
        print("Moving {} to {} from {}".format(file_name, target_dir, directory)) 
        shutil.copy(source_path, target_dir) 


except shutil.SameFileError: 
    print("{} is already in the folder".format(file_name)) 

注意,我把例外,在那裏,因爲當它發現已經在那裏的文件夾中文件,將限定點。

+0

當然它永遠運行。你有一個'while True'循環,它永遠不會中斷... –

+0

所以,如果我拿出True語句。它完成後會打破循環?但是,如何避免複製已經存在的文件呢? –

+0

當你的'os.walk'迭代器耗盡時它會停止。 –

回答

0

您可以使用os.listdir()創建目錄中的所有文件和文件夾列表,然後使用for迭代通過文件

列表

像這樣的東西應該足夠

import os 

files = os.listdir("D:\\Tibi") 

for file in files: 
    "copy files..."