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

真的吗?你可以用'print'语句再试一次吗? – Batman

+0

我在循环的每个部分(紧接在循环之后和if语句之后)分别添加了3个不同的打印行(分别为“Hello”,“Hello World”和Hello World2),并在行中添加了print语句。代码 产量为:。 你好 的Hello World 你好你好 我 –

相关问题