将所有具有 .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(...)”
假设我的源路径 (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(...)”