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

问题描述

假设我的源路径(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),则需要创建它。

标签: pythonos.path

解决方案


最好的方法是定义一个逐级复制目录的递归函数

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(...) "


推荐阅读