python - 将所有具有 .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),则需要创建它。
解决方案
最好的方法是定义一个逐级复制目录的递归函数
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(...) "
推荐阅读
- excel - 从 IE 下载文件的宏丢失或跳过
- python - 如何在另一个本身依赖于脚本的项目文件夹中运行 Python 脚本?
- angular - 如何按升序和降序排序Angular 6
- python - 从很长的字符串中获取特定的数字
- arrays - 存储过程:如何从多数组中的 JSON 对象获取数据
- javascript - datepicker 在数据库 codeigniter 上始终为 0
- javascript - render_template 导致 TypeError: 'str' object is not callable
- adfs - 解释工件解析和令牌重放检测
- laravel - 如何验证日期时间 Laravel
- r - 使用循环从具有多个条件的数据框中删除行