将大型文件列表从一个位置复制到另一个位置

时间:2014-12-02 13:39:29

标签: python

(使用Python 3.4.2) 我正在尝试将不同位置的8,000多个文件列表复制到临时目录。 源路径看起来像这个D:\ dir \ img0 \ 000和目标路径D:\ stage2 \ NW000.tif。

根据我的理解,shutil可以解决这个问题,我在网上找到了一个简单的例子,我一直在努力适应我的目的。我已经将源和目标路径的8,000多条记录保存在两个单独的文本文件中,每个目录路径后都有换行符。我希望变量src和dst存储列表的所有值,并希望shutil.copy将文件复制到新目标。我一直试图通过创建1个源文件夹和3个dest来测试代码。文件夹:Test,TestA,TestB,TestC。我创建了两个带有路径列表的文本文件,它们的外观如下:

(source.txt)
C:\Users\user1\Desktop\Test\t1.txt
C:\Users\user1\Desktop\Test\t2.txt
C:\Users\user1\Desktop\Test\t3.txt

(dest.txt)
C:\Users\user1\Desktop\TestA\1t.txt
C:\Users\user1\Desktop\TestB\2t.txt
C:\Users\user1\Desktop\TestC\3t.txt

我将两个列表文本文件,三个虚拟文本文件和脚本保存在Test目录中并执行了脚本,但是我没有在目标目录中找到这些文件。我想知道为什么这个脚本不起作用(在哪里放置源文件,目标文件和脚本文件以便脚本正确执行)。:

import shutil
import errno

file = open('source.txt', 'r')
source = file.readlines()
file = open('dest.txt', 'r')
destination = file.readlines()


def copy(src, dst):
    try:
        shutil.copytree(src, dst)
    except OSError as e:
        # If the error was caused because the source wasn't a directory
        if e.errno == errno.ENOTDIR:
            shutil.copy(src, dst)
        else:
            print('Directory not copied. Error: %s' % e)

copy(source, destination)

1 个答案:

答案 0 :(得分:4)

shutil.copytree(src, dst)一个目录树从src复制到dst。它不会自动迭代文件列表。您可以尝试压缩源列表和目标列表以及生成列表的循环:

for src, dst in zip(source, destination):
    copy(src, dst)

当您回退到shutil.copy(src, dst)时,您可能还会遇到问题 - 如果目标目录尚不存在,则会失败。