此函数根据文件类型将文件从一个文件夹复制到另一个文件夹。问题是当文件数量太大以至于复制时间太长时。也许还有别的方法可以做到?使用另一个库/语言/语法?
def main_copy(source, destination):
# List of all files inside directory
files_fullpath = [f for f in listdir(source)
if isfile(join(source, f))]
# Copy files to the correct folder according to filetype
if len(files_fullpath) != 0:
for fs in files_fullpath:
full_file = source + "\\" + fs
if str(fs).endswith('.ARW'):
shutil.copy(full_file, raw_folder + "\\" + fs)
else:
shutil.copy(full_file, jpg_folder + "\\" + fs)
if len(listdir(destination)) != 0:
print("Files moved succesfully!")发布于 2022-08-24 14:43:42
您可以尝试使用threading或multiprocessing来加速复制。我建议将concurrent.futures模块与ThreadPoolExecutor或ProcessPoolExecutor结合使用。
发布于 2022-08-24 14:54:37
加速您的过程的一个好主意是将计算并行化到最大的磁盘写入速度。
您可以使用多处理库并决定是使用多线程(multiprocessing.pool.ThreadPool)池还是使用多处理(multiprocessing.Pool)。
我将向您展示一个使用多线程的示例,但多处理也可能是一个很好的选择(取决于许多因素)。
import os
import glob
import shutil
from functools import partial
from multiprocessing.pool import ThreadPool
def multi_copy(source, destination, n=8):
# copy_to_mydir will copy any file you give it to destination dir
copy_to_mydir = partial(shutil.copy, dst=destination)
# list of files we want to copy
to_copy = glob.glob(os.path.join(source, '*'))
with ThreadPool(n) as p:
p.map(copy_to_mydir, to_copy)注意:如果您想深入了解多线程与多线程之间的关系,可以阅读这个漂亮的帖子。
注1:这个问题的瓶颈应该是写到磁盘。这取决于您正在运行代码的机器,可能在某些机器上您不会得到任何好处,因为一个进程可以饱和写到磁盘的容量。在许多情况下,以并行方式写入磁盘可能是有利的。
备注2: --当您有许多小文件时,应该获得并行编写的最大好处。
https://stackoverflow.com/questions/73475061
复制相似问题