使用 Python 将文件从多个目录复制到一个目录

Posted

技术标签:

【中文标题】使用 Python 将文件从多个目录复制到一个目录【英文标题】:Copy files from multiple directories into one directory using Python 【发布时间】:2015-06-23 11:42:54 【问题描述】:

使用python将文件从多个目录复制到一个目录中的最简单方法是什么?更清楚地说,我有一棵看起来像这样的树

+Home_Directory
  ++folder1
   -csv1.csv
   -csv2.csv
  ++folder2
   -csv3.csv
   -csv4.csv

我想将 csv1、csv2、...等全部放入某个没有文件夹层次结构的指定目录中。

+some_folder
   -csv1.csv
   -csv2.csv
   -csv3.csv
   -csv4.csv

我看过的一些解决方案:

使用 shutil.copytree 将不起作用,因为它会保留我不想要的文件结构。

我正在使用的代码与此问题中发布的代码非常相似: copy multiple files in python 问题是我不知道如何迭代地做到这一点。大概它只是在此之上的另一个 for 循环,但我对 os 和 shutil 库不够熟悉,无法确切知道我正在迭代什么。有什么帮助吗?

【问题讨论】:

【参考方案1】:

这是我想到的。我假设您只是从 1 个目录中提取 csv 文件。

RootDir1 = r'*your directory*'
TargetFolder = r'*your target folder*'
for root, dirs, files in os.walk((os.path.normpath(RootDir1)), topdown=False):
        for name in files:
            if name.endswith('.csv'):
                print "Found"
                SourceFolder = os.path.join(root,name)
                shutil.copy2(SourceFolder, TargetFolder) #copies csv to new folder

编辑:在 RootDir1 的末尾缺少一个 '。您也可以将此作为入门指南,使其按需要工作。

【讨论】:

效果很好。谢谢!除了这两个目录,我真的不需要做任何调整。 如果在 .endswith() 之前有一个 .lower() 函数会很棒,因为有时扩展名是 .PDF 或类似的。【参考方案2】:
import glob
import shutil
#import os
dst_dir = "E:/images"
print ('Named explicitly:')
for name in glob.glob('E:/ms/*/*/*'):    
    if name.endswith(".jpg") or name.endswith(".pdf")  : 
        shutil.copy(name, dst_dir)
        print ('\t', name)

【讨论】:

此代码有助于将多个文件从一个目录移动到另一个目录【参考方案3】:

您可以使用它将所有子文件夹从同一个目录移动到不同的目录到您想要的任何位置。

import shutil
import os
path=r'* Your Path*'
arr = os.listdir(path)
for i in range(len(arr)):
  source_dir=path+'/'+arr[i]
  target_dir = r'*Target path*'
    
  file_names = os.listdir(source_dir)
    
  for file_name in file_names:
      shutil.move(os.path.join(source_dir, file_name), target_dir)

【讨论】:

以上是关于使用 Python 将文件从多个目录复制到一个目录的主要内容,如果未能解决你的问题,请参考以下文章

hdfs 将多个文件复制到同一个目标目录

将多个文件复制到 Documents 目录

发布构建脚本以将所有文件从不同的目录复制到输出目录

linux 怎样复制一个目录的所有文件到另一个目录

Unix-在重命名文件时将相同文件从多个目录复制到新目录

如何将一个文件复制到多个子目录