有人可以帮我解决如何将文件夹中的所有文件复制到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 )
它复制文件的最高级别,而不是子目录中的文件夹。
非常感谢你的时间。
答案 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)