如何将文件从一个文件夹复制到多个文件夹

时间:2019-01-25 11:54:47

标签: python directory shutil

我在一个文件夹源中有130个文件,我想将每个文件复制到一个单独的文件夹001、002、003 ... 130中(所有这130个文件夹都位于目标文件夹中)。

以便每个文件夹仅包含一个文件。 我想出了这个,但可能有点混乱和多余...而且大多数情况下它不起作用。

import shutil
import os

source = '/Users/JohnCN/photo_database/mugshot_frontal/'
files = os.listdir(source)

for i in files:

    for fold in range(1,131):

        if fold<10:
            destination = "/Users/JohnCN/photo_DBsorted/00%s" %fold
            shutil.move(source+i, destination)

        elif fold in range(10,100):
            destination = "/Users/JohnCN/photo_DBsorted/0%s" %fold
            shutil.move(source+i, destination)

        else:
            destination = "/Users/JohnCN/photo_DBsorted/%s" %fold
            shutil.move(source+i, destination)

2 个答案:

答案 0 :(得分:3)

我将通过以下方式进行操作:

import shutil
import os

source = '/Users/JohnCN/photo_database/mugshot_frontal/'
files = os.listdir(source)

for idx, f in enumerate(files):
    destination = '/Users/JohnCN/photo_DBsorted/{d:03d}'.format(d=(idx + 1))
    shutil.move(source + f, destination)

那么,它有什么作用? for idx, f in enumerate(files):在循环时对文件进行计数,因此您知道文件的索引。为了获得目的地,将idx用作目录名。我假设您知道方法format{d:03d}简单地说,将值d分配给它应该是3个字符长,该值是一个整数,并用零填充(例如003)。当然,此代码假定您没有1000多个文件,在这种情况下,只需增加零的数量即可。例如,您可以计算文件数的log10值,以获取必须添加的零数。

答案 1 :(得分:1)

首先,如果我想复制文件但不移动,则宁愿使用shutil.copy。虽然,主要思想并不依赖于此。另外,您不需要if语句以及内部循环:

files = os.listdir(source)

for i in range(len(files)):
    file = os.path.join(source, files[i]) 
    shutil.copy(file, os.path.join(source, '%03d'%i, files[i])