通过多处理和shutil-python从目录中复制文件



shutil提供了复制文件/文件夹的最简单方法之一从一个目录到另一个目录。

一个简单的方法是:

# Source path
src = r'D:source_path'  
# Destination path  
dest = r'C:destination_pathnew_folder'
# Copy the content of source to destination  
destination = shutil.copytree(src, dest) 

上面的问题是它一个接一个地复制每个单独的文件。对于包含一千个文件的目录,以及在远程服务器中的一个文件,这将变得困难和耗时。

multiprocessing应用于此任务将解决大量的痛苦和时间。我知道多处理功能的基本用法,但不知道如何进行。我想这样开始:

import multiprocessing 
import os 
def copy_instance(): 
# printing process id 
destination = shutil.copytree(src, dest) 

if __name__ == "__main__": 
# printing main program process id 
print("ID of main process: {}".format(os.getpid())) 

# creating processes 
p1 = multiprocessing.Process(target=copy_instance) 

# starting processes 
p1.start() 

但这并不能解决将每个文件作为单独的运行来应用的任何问题。任何帮助、建议或链接都会有所帮助。

编辑:也尝试过,但无法正常工作。任何建议。

import multiprocessing 
import os 
import shutil

def copy_instance(list): 
dest = r'C:destination_pathnew_folder'
destination = shutil.copytree(list, dest) 
return destination

if __name__ == "__main__": 
# input list 

sec = r"D:source_path"
source = os.listdir(sec)
list=[]
for ith in range(len(source)):
list.append(str(sec) + "\" + str(source[ith]))
# creating a pool object 
p = multiprocessing.Pool() 

# map list to target function 
result = p.map(copy_instance, list) 

print(result) 

您编码的内容并不能解决问题,因为您没有正确使用多处理。最后两行只是创建一个复制文件的进程,它的工作方式就像你什么都没做一样,我的意思是,就好像你没有使用多处理一样,所以你必须创建多个进程来复制文件,一个解决方案可以是每个文件创建一个进程,要做到这一点,你必须添加一些步骤,并停止使用copytree,如下所示:

import shutil
import multiprocessing 
import os
def copy_instance(file): 
# printing process id to SHOW that we're actually using MULTIPROCESSING 
print("ID of main process: {}".format(os.getpid()))     
shutil.copy(f'{src}{file}', f'{dest}/') 
if __name__ == "__main__": 
files = os.listdir(src) # Getting the files to copy
for file in files:
# creating a process per file 
p1 = multiprocessing.Process(target=copy_instance, args=(file, )) 
# starting processes 
p1.start() 

确保具有在dest目录中复制的权限,并尝试将absolute path用于源目录和目标目录

相关内容

  • 没有找到相关文章

最新更新