将所有具有 .csv 扩展名的文件和子文件夹复制到具有相同文件夹层次结构的另一个新路径中

Copy all files and subfolders having .csv extension into another new path with same folder hierarchy

假设我的源路径 (C:\) 中有多个文件夹(abc、bcd、cde)和不同的 .csv 文件

C:\abc\test1.csv
C:\bcd\test2.json
C:\cde\test3.csv

需要将带有.csv的文件夹移动到目标路径(D:\),如下所示:

D:\abc\test1.csv
D:\cde\test3.csv

如果目标路径中不存在文件夹名称(abc,cde),则需要创建。

最好定义一个递归函数,逐级复制目录

import os
import shutil

def selective_copy(source_dir, target_dir, file_extension):
   if not os.path.exists(target_dir):
      os.makedirs(target_dir)

   for item in os.listdir(source_dir):
      source_fn = os.path.join(source_dir, item)
      if os.path.isdir(source_fn):
         selective_copy(source_fn, os.path.join(target_dir, item), file_extension)
      elif item.endswith(file_extension):
         shutil.copyfile(source_fn, os.path.join(target_dir, item))

如果您希望仅在有文件要从中复制时才复制目录结构,您可以将“if not os.path.exists(target_dir)”条件移动到“shutil.copyfile(...)”