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

Python中如何排除已处理的.jpg文件,避免重复执行

我完全懂这种大规模任务中断后不想从头跑的痛苦!43小时的耗时真的耗不起,给你几个实用的方案,精准筛选出未处理的JPG文件:

核心思路

因为input和processed的子文件夹结构不对应,所以不能按路径匹配,核心是对比文件名(不含后缀):

  1. 先收集processed文件夹下所有已生成的.npy文件的文件名(去掉.npy后缀)
  2. 遍历input下所有.jpg文件,筛选出文件名不在已完成列表里的文件

这种方式不管子文件夹结构如何,只看文件名本身,完全适配你的场景。

Python实现(推荐,适合集成到你的预处理脚本)

用Python的pathlib库(现代、简洁)来实现,代码可以直接嵌入到你的现有脚本开头:

from pathlib import Path

# 替换成你的实际文件夹路径
INPUT_DIR = Path("input")
PROCESSED_DIR = Path("processed")

# 第一步:收集所有已完成的文件名(不含后缀),用集合存,查找速度极快
completed_filenames = set()
for npy_path in PROCESSED_DIR.rglob("*.npy"):
    # 跳过空文件或损坏的文件(可选但推荐)
    if npy_path.stat().st_size > 0:
        completed_filenames.add(npy_path.stem)

# 第二步:筛选未处理的JPG文件
unprocessed_files = []
for jpg_path in INPUT_DIR.rglob("*.jpg"):
    if jpg_path.stem not in completed_filenames:
        unprocessed_files.append(jpg_path)

# 输出结果,或者直接传入你的处理函数
print(f"共找到 {len(unprocessed_files)} 个未处理的JPG文件")
# 比如:for file in unprocessed_files: your_processing_function(file)

为什么用集合?

集合的成员查找是O(1)时间复杂度,对比列表的O(n),当文件数量成千上万时,速度差异会非常明显,避免额外的耗时。

Shell脚本实现(适合快速批量操作)

如果你不想改Python脚本,用Shell命令也能快速得到未处理的文件列表:

# 1. 生成input下所有JPG的文件名(不含路径和后缀)并排序
find input -name "*.jpg" -exec basename {} .jpg \; | sort > input_jpgs.txt

# 2. 生成processed下所有NPY的文件名(不含路径和后缀)并排序
find processed -name "*.npy" -exec basename {} .npy \; | sort > processed_npys.txt

# 3. 找出input有但processed没有的文件名
comm -23 input_jpgs.txt processed_npys.txt > unprocessed_names.txt

# 4. (可选)找到这些文件名对应的实际JPG文件路径
echo "未处理的文件路径:"
for name in $(cat unprocessed_names.txt); do
    find input -name "${name}.jpg"
done

额外优化建议

  • 检查文件完整性:如果脚本中断时可能生成空的.npy文件,一定要加上文件大小检查(Python示例里的st_size > 0),避免跳过实际未完成的任务
  • 处理重名文件:如果input下不同子文件夹有同名的.jpg,对应的.npy会覆盖,这种情况建议把相对路径作为标识(比如用jpg_path.relative_to(INPUT_DIR).with_suffix('')代替jpg_path.stem),确保每个文件唯一对应

内容的提问来源于stack exchange,提问作者Maks Piddubnyi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:13:20