我需要编写一个Python脚本来对图片进行排序,我该如何做?

3
我需要的是一个脚本,可以遍历大量图片并将它们分类到文件夹中。
我在展会上拍摄狗的照片,例如我拍了几张Dog1的照片,这些狗的照片以连续编号格式自动命名(Dog1-1,Dog1-2,Dog1-3等)。Dog2也按照相同的格式命名。
我想要一个脚本,可以将Dog1-1-10移动到名为Dog 1的文件夹中。将Dog2-1-10移动到名为Dog 2的文件夹中,以此类推。
如何用Python实现这个功能?

2
你尝试了什么? - sshashank124
我尝试着按照这个指南自动化常见任务进行操作。我对Python毫不了解,因此任何指导或指南链接都将非常有帮助。 - user3553113
1个回答

6
所以基本上,你想做的事情是:
  1. 找到给定文件夹中的每个文件
  2. 获取每个文件名的第一部分并将其用作文件夹名称
  3. 如果该文件夹不存在,则创建它
  4. 将文件移动到该文件夹中
  5. 重复
很好!弄清楚我们想要做什么已经是成功的一半了--现在,主要是通过搜索引擎找到答案并将其转化为代码。
首先,我们需要检查的文件夹:
folder_path = "myfolder"

现在,我们希望找到该文件夹中的每个文件。快速的搜索会得到这篇文章
import os
import os.path

images = [f for f in os.listdir(folder_path) if os.path.isfile(os.path.join(folder_path, f))]

作为一个附注,我将经常使用`os.path.join`,你可能想简单了解一下它的作用。在评论中提供的指南已经很好地涵盖了它。
现在,我们想要每个名称的第一部分。假设我们将处理第一个破折号之前的所有内容作为文件夹名称,并忽略其余部分。一种方法是使用`string.split`,它将字符串按给定的字符分割成一个字符串列表,并获取第一个元素:
for image in images:
    folder_name = image.split('-')[0]

现在,如果那个文件夹不存在,我们要创建它。再次,谷歌是我们的朋友

new_path = os.path.join(folder_path, folder_name)
if not os.path.exists(new_path):
    os.makedirs(new_path)

最后,我们将原始图像移动
import shutil

old_image_path = os.path.join(folder_path, image)
new_image_path = os.path.join(new_path, image)
shutil.move(old_image_path, new_image_path)

将所有内容综合起来:
import os
import os.path
import shutil

folder_path = "test"

images = [f for f in os.listdir(folder_path) if os.path.isfile(os.path.join(folder_path, f))]

for image in images:
    folder_name = image.split('-')[0]

    new_path = os.path.join(folder_path, folder_name)
    if not os.path.exists(new_path):
        os.makedirs(new_path)

    old_image_path = os.path.join(folder_path, image)
    new_image_path = os.path.join(new_path, image)
    shutil.move(old_image_path, new_image_path)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接