我需要写一个Python脚本来排序图片,怎么做?
我想要一个脚本,可以把一大堆图片整理到不同的文件夹里。
我在展会上拍狗狗的照片,比如我拍了好几张狗1的照片,这些照片的名字都是按顺序命名的(比如Dog1-1、Dog1-2、Dog1-3等等)。狗2的照片也是这样命名。
我希望这个脚本能把Dog1-1到Dog1-10的照片移动到一个叫“Dog 1”的文件夹里,把Dog2-1到Dog2-10的照片移动到一个叫“Dog 2”的文件夹里,依此类推。
我该怎么用Python来实现这个呢?
1 个回答
6
基本上,你想要做的事情是:
- 找到指定文件夹里的每一个文件
- 取每个文件名的第一部分,作为文件夹的名字
- 如果这个文件夹不存在,就创建它
- 把文件移动到这个文件夹里
- 重复以上步骤
太棒了!弄清楚我们想做什么是成功的一半——接下来,主要就是在网上查资料,把这些想法变成代码。
首先,我们需要指定要检查的文件夹:
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)