我要找的是一个脚本,可以通过一个庞大的图片列表,并将它们分类到文件夹。
所以我在展览上给狗拍照,比如说我给狗1拍了几张照片,这张狗的照片会自动命名为序列号格式(dog1-1,dog1-2,dog1-3等等)。Dog2将遵循相同的格式。
我想要一个脚本,可以采取狗1-1-10和移动到一个名为狗1的文件夹。将Dog2-1-10放入名为Dog2的文件夹中,等等。
在Python中如何实现这一点?
最佳答案
所以基本上,你想做的是:
查找给定文件夹中的每个文件
取每个文件名的第一部分并将其用作文件夹名
如果文件夹不存在,则创建它
把文件移到那个文件夹
重复
好吧,漂亮!弄清楚我们想要做什么是这场战斗的一半——现在,这主要是一个通过谷歌搜索并将其转化为代码的问题。
首先,我们需要签入文件夹:
folder_path = "myfolder"
现在,我们要找到文件夹中的每个文件。一个快速的google会话出现了this:
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]
现在,如果那个文件夹还不存在,我们想创建它。再一次,google is our friend:
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)