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

5
什么是使用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库还不够熟悉,不知道具体迭代什么。请帮忙吗?


https://www.youtube.com/watch?v=RsBHT6-hXGM - Yogeshwaran
3个回答

12
这是我的想法。我假设您只从一个目录中提取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 末尾缺少一个'。您也可以将此用作起始指南,使其按预期工作。


那个完美地运行了。谢谢!我真的没有做任何调整,除了这两个目录。 - sfortney
如果在 .endswith() 前面加上 .lower() 函数就好了,因为有时候扩展名是 .PDF 或类似的。 - Pranzell

3
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)

1
这段代码有助于将多个文件从一个目录移动到另一个目录。 - moshiurcse

1
你可以使用它将同一目录下的所有子文件夹移动到不同的目录,移动到你想要的任何位置。
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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接