如何在不复制python中的文件夹结构的同时从文件夹(包括子文件夹)复制所有文件

时间:2014-04-21 11:29:50

标签: python

有人可以帮我解决如何将文件夹中的所有文件复制到python中的另一个目标文件夹。问题是我不想复制子目录结构。但我想要其中的文件。

例如,假设在根文件夹中,有3个文件夹,每个文件夹包含10个文件。每个文件夹中还有2个文件夹,每个文件夹包含5个文件。 (因此每个第一级文件夹总共有20个文件和2个子目录)。总计60个文件。

我希望将所有这60个文件复制到一个目标目录,丢弃子文件夹结构。

这是我尝试过的代码:

# path : source folder path
# compiled_path: destination folder path
w = os.walk(path)
for root, dirs, files in w:
    for dir_name in dirs:
        file_list_curent_dir = os.walk(path+"\\"+dir_name).next()[2]
        for item in file_list_curent_dir:
            shutil.copy(path+"\\"+dir_name+"\\"+item, compiled_path+"\\"+item )

它复制文件的最高级别,而不是子目录中的文件夹。

非常感谢你的时间。

2 个答案:

答案 0 :(得分:15)

import os
import shutil

for root, dirs, files in os.walk('.'):  # replace the . with your starting directory
   for file in files:
      path_file = os.path.join(root,file)
      shutil.copy2(path_file,'destination_directory') # change you destination dir

答案 1 :(得分:0)

您可以使用此原始函数(但要递归遍历目录的最佳方法是os.walk)

from shutil import copyfile
import shutil
def your_function(dir):
    for folder in os.listdir(dir):
        folder_full_path = os.path.join(dir,folder)
        move_down_and_delete(folder_full_path,folder_full_path)

def move_down_and_delete(input,copy_to_dir):
    if os.path.isfile(input):
        dest = os.path.join(copy_to_dir,os.path.basename(input))
        print dest,input
        copyfile(input,dest)
        return
    for child in os.listdir(input):
         current_obj_path = os.path.join(input, child)
         move_down_and_delete(current_obj_path,copy_to_dir)
         if not os.path.isfile(current_obj_path):shutil.rmtree(current_obj_path)