【问题标题】:Copy all files and subfolders having .csv extension into another new path with same folder hierarchy将所有具有 .csv 扩展名的文件和子文件夹复制到另一个具有相同文件夹层次结构的新路径中
【发布时间】:2021-11-10 14:32:45
【问题描述】:

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

【问题讨论】:

  • 欢迎来到 StackOverflow。现在你的问题有点模糊,读起来就像你只是想让别人写你的代码。您可以尝试阅读其他一些问题/答案,看看您是否可以先回答自己的问题。到目前为止,您尝试了什么(如果可以,请提供代码)?它奏效了吗?你的目录结构有多深? shutil 和 copytree 可能会有所帮助。
  • 嗨@Pam,我遇到了很多问题,但它们只是关于无条件复制整个目录。我尝试了shutil copytree,但它只能忽略某些类型的扩展名,如.txt、.csv等。但在这种情况下,只需要包含.csv

标签: python os.path


【解决方案1】:

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

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

【讨论】:

  • 非常感谢。它奏效了
猜你喜欢
  • 2020-09-04
  • 1970-01-01
  • 2016-06-06
  • 1970-01-01
  • 1970-01-01
  • 2014-11-08
  • 2021-03-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多