基于 Python 的删除图片脚本
下面提供一个基于 Python 的脚本示例,支持在指定文件夹中根据用户输入的关键字批量删除图片文件。脚本要点如下:
- 使用
argparse获取命令行参数:目标文件夹路径、匹配关键字、可选的匹配模式(简单子串或相似度阈值)。 - 遍历文件夹下所有常见图片格式(如
.jpg/.jpeg/.png/.gif/.bmp),对每个文件名进行模糊匹配。 - 匹配方式可选:
- 子串匹配:文件名中包含关键字即视为匹配。
- 相似度匹配:使用
difflib.SequenceMatcher计算文件名与关键字的相似度,超过阈值即删除。
- 删除前可打印确认列表,或加
--yes参数跳过确认直接删除。
脚本实现
#!/usr/bin/env python3
# delete_images.py
import os
import argparse
import fnmatch
import shutil
from difflib import SequenceMatcher
def is_fuzzy_match(name: str, keyword: str, mode: str, threshold: float) -> bool:
"""判断文件名与关键字是否“模糊匹配”。"""
name_lower = name.lower()
kw_lower = keyword.lower()
if mode == 'substring':
return kw_lower in name_lower
elif mode == 'ratio':
ratio = SequenceMatcher(None, name_lower, kw_lower).ratio()
return ratio >= threshold
else:
raise ValueError(f"Unknown mode: {mode}")
def gather_images(folder: str, exts=None):
"""收集指定后缀的所有图片文件路径。"""
if exts is None:
exts = ['*.jpg', '*.jpeg', '*.png', '*.gif', '*.bmp']
for root, _, files in os.walk(folder):
for pattern in exts:
for fn in fnmatch.filter(files, pattern):
yield os.path.join(root, fn)
def main():
parser = argparse.ArgumentParser(
description="根据关键字(模糊匹配)批量删除指定文件夹内的图片"
)
parser.add_argument(
'-f', '--folder', required=True,
help="目标图片文件夹路径"
)
parser.add_argument(
'-k', '--keyword', required=True,
help="用于匹配文件名的关键字"
)
parser.add_argument(
'-m', '--mode', choices=['substring', 'ratio'],
default='substring',
help="匹配模式:'substring'(默认)或 'ratio'(相似度)"
)
parser.add_argument(
'-t', '--threshold', type=float, default=0.6,
help="相似度匹配阈值,仅在 mode='ratio' 时生效(0~1 之间)"
)
parser.add_argument(
'-y', '--yes', action='store_true',
help="跳过确认,直接删除匹配到的文件"
)
args = parser.parse_args()
folder = args.folder
keyword = args.keyword
mode = args.mode
threshold = args.threshold
auto_yes = args.yes
# 收集待处理图片
imgs = list(gather_images(folder))
matches = [p for p in imgs
if is_fuzzy_match(os.path.basename(p), keyword, mode, threshold)]
if not matches:
print(f"未在 {folder} 中找到与 “{keyword}” 匹配的图片。")
return
# 列出并确认
print("以下文件将被删除:")
for p in matches:
print(" ", p)
if not auto_yes:
confirm = input("确定要删除以上文件吗?输入 'yes' 确认:")
if confirm.lower() != 'yes':
print("已取消。")
return
# 执行删除
for p in matches:
try:
os.remove(p)
except Exception as e:
print(f"删除失败:{p},原因:{e}")
print("删除完成。")
if __name__ == "__main__":
main()
使用示例
# 在 /home/user/photos 中删除文件名包含 “vacation” 的图片(子串匹配)
python delete_images.py -f /home/user/photos -k vacation
# 使用相似度匹配,阈值 0.7,并自动确认删除
python delete_images.py -f ./images -k "vacaion" -m ratio -t 0.7 -y
注意事项
- 务必先做测试:建议先在一个副本文件夹中测试,确保匹配逻辑符合预期,以免误删。
- 备份重要图片:如有重要照片,务必提前备份。
- 如果想排除子文件夹,可将
gather_images中的os.walk改为只扫描顶层目录。

浙公网安备 33010602011771号