2017-02-27 1 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

にそれを十分ですディレクトリ内のすべてのファイルとフォルダのリストを作成し、ファイル

のリストを反復するために使用するos.listdir()を使用することができます永遠に走るあなたは決して壊れない「while True」ループでそれを持っています... –

+0

だから私は真の声明を取り出します。それが完了したらループを壊すでしょうか?しかし、そこにすでにあるファイルをコピーしないようにするにはどうしたらいいですか? –

+0

あなたの 'os.walk'イテレータが使い果たされたときに停止します。 –

答えて

0

あなたはこのような何かが、もちろん

import os 

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

for file in files: 
    "copy files..." 
関連する問題