在python中复制文件时添加多个目录作为目标

时间:2016-09-03 13:23:55

标签: python

我想将整个目录或目录中的文件同时复制到两个或多个目录中。我正在努力使用语法为目标添加更多目录,因此副本同时完成(因为我将运行一个cron作业)。

如果我有一个目录,一切正常,但我需要添加两个或更多。

最后一行代码是:

shutil.copy(full_file_name, r'S:\\A')

我想在S:\

之后添加更多目标文件夹

(这适用于Win机器)

感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

为什么不包裹循环:

destinations = [r'S:\\A', r'S:\\B', r'S:\\C']
for dest in destinations:
    shutil.copy(full_file_name, dest)

答案 1 :(得分:1)

在此示例中,您将定义之前的文件夹和目标文件夹数组。然后,Python在for循环中遍历目标。请注意使用os.path.join,这是一种为跨平台工作构建文件路径的安全方法。

import shutil
import os


full_file_path =  os.path.join('home', 'orig')
paths = [os.path.join('home', 'destA'), os.path.join('home', 'destB')]
for path in paths:
    shutil.copy(full_file_path, path)

答案 2 :(得分:0)

如果要同时复制文件,则应使用multiprocessing。 在此示例中,我们有两个文件file1.txt和file2.txt,我们将它们复制到c:\ temp \ 0和c:\ temp \ 1。

import multiprocessing
import shutil

def main():
    orgs = ['c:\\temp\\file1.txt']
    dests = ['c:\\temp\\0\\', 'c:\\temp\\1\\'] 
    num_cores = multiprocessing.cpu_count()
    p = multiprocessing.Pool(num_cores)
    operations =  [(x,y) for x in orgs for y in dests]
    p.starmap(shutil.copy, operations)
    p.close()
    p.join()

if __name__ == "__main__":
    main()