我想要的是一个可以浏览大量图片并将其排序到文件夹中的脚本。
所以我在展会上给狗拍照,比如说我给狗1拍了几张照片,这张狗的照片会自动以序列号格式命名(dog1-1、dog1-2、dog1-3等)。Dog2将遵循相同的格式。
我想要一个可以将Dog1-1-10移到名为Dog1的文件夹中的脚本。Dog2-1-10放入名为Dog 2等的文件夹中。
在Python中如何做到这一点?
因此,基本上,您想要做的是:
- 查找给定文件夹中的每个文件
- 将每个文件名的第一部分用作文件夹名称
- 如果文件夹不存在,请创建它
- 将文件移到该文件夹中
- 重复
哦,漂亮!弄清楚我们想做什么是成功的一半——现在,主要是在谷歌上搜索并将其转化为代码。
首先,我们需要登记的文件夹:
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)