Python - 我可以将文件从源文件夹复制到多个目的地的最快方法是什么

时间:2012-02-01 22:05:01

标签: python

source = / tmp / src 包含a,b,c,d文件 destinations ='/ one','/ two'

所以我想将文件a,b,c,d复制到两个目的地'/ one'和'two'

类似

source = '/tmp/src'
destinations = []

def copy_files_multiple_dest(source,destinations)
对吗? 现在,我将如何遍历所有目的地

4 个答案:

答案 0 :(得分:1)

如下:

import os
import shutil


source = '/tmp/src/'
destinations = []

def copy_files_multiple_dest(source,destinations):
  sfiles = os.listdir(source) # list of all files in source
  for f in sfiles:
    for dest in destinations:
      shutil.copy(os.path.join(source,f), dest)

我不确定最快但它应该可以胜任。

答案 1 :(得分:1)

只读一次源文件有用:

def xcopy_to_multiple_destinations(srcDir, destinations):
    for filename in os.listdir(srcDir):
        with open(os.path.join(srcDir, filename), "rb") as srcFile:
            for destDir in destinations:
                with open(os.path.join(destDir, filename), "wb") as destFile:
                    # ...copy bytes from srcFile to destFile...

如果要递归复制,请使用os.walk(请参阅其他问题:Python recursive folder read)。您可以相应地调整解决方案。

请注意,“最快”是一个广义的术语。例如,硬连接应该更快;或者使用适当的文件系统进行写时复制。

答案 2 :(得分:1)

os包是通常的方法,但看看这个新项目https://github.com/amoffat/pbs。 你可以这样做:

import pbs
destinations =['/one', '/two']
for destination in destinations:
   pbs.copy("-R", '/tmp/src', destination)

也许不是最快但肯定会赢得选美比赛

答案 3 :(得分:0)

由于您说文件不会分歧,您可以将它们硬链接。你不需要专门的python,这就是我在bash中的表现。

dests=(a b c d)
for dest in "${dests[@]}"; do
  cp -rl /source/root "$dest"
done

如果必须是python,请查看os.link以及该模块中的其他函数。