You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows 11下Python Pillow批量压缩JPG脚本无报错中途停止问题

脚本中途随机停止的原因及修复方案

1. 文件访问冲突(Windows系统特有)

Windows后台进程(如资源管理器缩略图缓存、杀毒软件实时扫描)可能锁定部分图片文件,导致Pillow写入时触发底层IO异常,这类异常可能无法被Python的Exception捕获,直接终止脚本。

修复:

  • 添加重试逻辑,应对临时锁定:
    import time
    # 替换原文件处理的try代码块
    max_retries = 3
    success = False
    for attempt in range(max_retries):
        try:
            with Image.open(filepath) as img:
                if img.mode in ('RGBA', 'P'):
                    img = img.convert('RGB')
                img.save(filepath, 'JPEG', quality=quality, optimize=True)
            success = True
            break
        except Exception as e:
            if attempt == max_retries -1:
                print(f"处理失败({max_retries}次重试后):{filepath} - {str(e)}")
            else:
                time.sleep(1)
    if success:
        processed +=1
        print(f"已压缩:{filepath}")
    
  • 临时关闭杀毒软件实时扫描,或将目标文件夹加入白名单。

2. 损坏/异常格式的JPG文件

部分JPG存在格式损坏(如文件头缺失、编码异常),Pillow处理这类文件时可能直接崩溃,而非抛出Python可捕获的异常。

修复:

  • 先校验文件有效性,过滤无效JPG:
    import imghdr
    # 修改文件判断逻辑
    if filename.lower().endswith(('.jpg', '.jpeg')):
        if imghdr.what(filepath) != 'jpeg':
            print(f"无效JPG文件:{filepath}")
            continue
        # 后续处理逻辑
    

3. 控制台输出缓冲溢出

处理大量图片时,连续的print输出可能触发Windows控制台缓冲溢出,导致脚本无响应停止。

修复:

  • 改用日志文件记录输出,避免控制台压力:
    import logging
    # 在脚本开头初始化日志
    logging.basicConfig(
        filename='压缩日志.log',
        level=logging.INFO,
        format='%(asctime)s - %(message)s',
        encoding='utf-8'
    )
    # 用logging.info替代print
    logging.info(f"已压缩:{filepath}")
    

4. 目录遍历过程中结构变化

若遍历期间有其他程序修改目标文件夹(新增/删除文件),os.walk可能出现隐性错误,导致遍历终止。

修复:

  • 先一次性收集所有JPG路径,再批量处理:
    # 替换原遍历逻辑
    jpg_paths = []
    for root, _, files in os.walk(directory):
        for fname in files:
            if fname.lower().endswith(('.jpg', '.jpeg')):
                jpg_paths.append(os.path.join(root, fname))
    
    # 逐个处理收集到的路径
    for filepath in jpg_paths:
        # 原文件处理逻辑
    

内容的提问来源于stack exchange,提问作者Lorenzo T

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 20:40:54