2017-02-27 7 views
-1

約12のサブフォルダから複数の.mp4と.CR2ファイルをコピーする必要があります。私はコードの複数のバリエーションを試して、最初から始めたいと思います。Pythonを使用して多数のサブフォルダから特定のタイプの多くのファイルをコピーするにはどうすればよいですか?

import os 
import shutil 
#os.chdir('C:\\') 

dir_src = 'D:\\Users\\Tibi\\Pictures' 
dir_dst = 'D:\\test' 

#while True: 
# try: 
#  for folder in os.walk(dir_src): 
#   print(folder) 
#   for filename in os.listdir(dir_src): 
#    if filename.endswith('.CR2'): 
#     shutil.copy(dir_src + '\\' + filename, dir_dst) 
#    print(filename) 
# except UnicodeEncodeError: 
#  print(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>File %s was Skipped!<<<<<<<<<<<<<<<<<<<<<<<<<<<<<" %filename) 
import pathlib 
import glob 

dir_src = pathlib.Path('D:\\Users\\Tibi\\Pictures\\Move') 
dir_dst = pathlib.Path('D:\test') 

for file in dir_src.rglob('*.CR2'): 
    shutil.copy(dir_src + '\\' + file, dir_dst) 
    print("Current File is: %s" % file) 

私はそのコードの下にコメントなしでコメントアウトされたコードを試しました。

+0

あなたが試みたバリエーションを私たちに教えてください。最初から何を意味するのですか?あなたは私たちにもっと良い情報を与えることができます。ディレクトリ構造はどのように見えますか? – The4thIceman

答えて

1

これは、あなたが欲しいものを行う必要がありますが、それは何のファイルが同じ名前を持っていないと想定ん:

import os 
import shutil 

source_dir = r"/Users/ThatOtherBatman/Foo/" 
target_dir = r"/Users/ThatOtherBatman/Bar/" 
extensions = (".mp4", ".cr2") 

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

os.walkあなたはディレクトリを再帰的に検索するために使用するものです。次に、ファイル拡張子が必要な拡張子に含まれているかどうかを確認し、存在する場合はファイルをコピーします。

+0

ソースとターゲットを変更しても機能しませんでした。 1秒間停止し、出力もターゲットフォルダの変更もなく終了しました。 –

+1

本当ですか? 'print'文でもう一度試してみることができますか? – Batman

+0

私は(すぐにforループやif文の後の両方の後に)ループの各部分に(それぞれ、「こんにちは」、「Hello World」の、およびこんにちはWorld2" )3種類の印刷行を追加し、あなたの行にprint文を追加しましたコードの 出力した。 こんにちは Hello Worldの こんにちは こんにちは –

関連する問題