我是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'”错误,但没有任何反应 - 文件不会被复制,甚至不会复制到第一张图像。
请您就如何继续提供一些建议?
谢谢!
答案 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)