将列表中的多个图像从一个文件夹复制到另一个文件夹而不复制所有图像

时间:2018-03-12 14:02:47

标签: python python-3.x

我是Python初学者,我正在尝试从我们网络上的文件夹中复制多个图像。我学会了如何将单个图像从网络复制到桌面。我还学会了将所有图像从一个文件夹复制到另一个文件夹。我面临的问题是我们的网络文件夹有超过37,000张图片,但我的客户需要1524个特定图片。

这是我复制一张图片的功能代码:

import glob
import shutil
import os

src_dir = 'folder1'
dst_dir = 'folder2'
imageNames = ['image1.png']

for pngfile in glob.iglob(os.path.join(src_dir, imageNames)):
    shutil.copy(pngfile, dst_dir)

这很有效。它将图像从一个文件夹移动到另一个文件夹。但是,如果我向imageNames添加更多图像,使其成为像imageNames = ['image1.png','image2.png']这样的列表,我会遇到以下错误:

“TypeError:join()参数必须是str或bytes,而不是'list'”

有人在另一个线程上说os.path.join不会将列表作为参数。 (Python os.path.join() on a list)。相反,他似乎建议基本上将列表转换为字符串,然后使用split方法分隔文件名。然后在我的循环中,将*(“splat operator”)添加到imageNames,如下所示:

import glob
import shutil
import os

src_dir = "folder1"
dst_dir = "folder2"
imageNames = "'image1.png', 'image2.png'".split(",")

for pngfile in glob.iglob(os.path.join(src_dir, *imageNames)):
    shutil.copy(pngfile, dst_dir)

当我运行此代码时,我没有收到“not'list'”错误,但没有任何反应 - 文件不会被复制,甚至不会复制到第一张图像。

请您就如何继续提供一些建议?

谢谢!

1 个答案:

答案 0 :(得分:0)

您链接的问题中的用例是完全不同的,不适用于您的情况。它没有谈论多个文件,只讨论了一个路径,路径的每个部分都是列表中的一个条目。

在你的情况下,你只需要遍历你的列表,然后单独复制每个文件(不需要全局):

import shutil
import os

src_dir = "folder1"
dst_dir = "folder2"
imageNames = ['image1.png', 'image2.png']
for imageName in image_names:
    shutil.copy(os.path.join(src_dir, imageName), dst_dir)