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

Python利用数字命名规则读取目录指定范围图片的优化方法

优化实现方案

原代码存在两个明显问题:

  • 多个并行if判断会导致单张图片命中多个分支,出现重复读取图片、重复计数的逻辑bug
  • 依赖遍历顺序的计数逻辑不稳定,如果目录出现非预期文件会导致计数偏移,范围匹配错误

以下是两种不需要计数、直接利用文件名数字属性的优化方案:


方案1:基于文件名数字ID过滤(适合文件可能不连续的场景)

先提取所有jpg文件的数字ID,过滤掉超范围文件后再处理,不受目录内非目标文件影响:

import os
import glob
import cv2
from tqdm import tqdm

img_dir = "/path/to/images"
# 范围映射配置:(左闭区间, 右开区间, 输出目录),修改配置即可调整范围,不需要改业务逻辑
range_mapping = [
    (0, 100, "/path/to/output/dir_1"),
    (100, 150, "/path/to/output/dir_2"),
    (150, 200, "/path/to/output/dir_3")
]
# 预计算最大处理ID,提前过滤超范围文件
max_process_id = max([item[1] for item in range_mapping])

# 筛选合法的数字命名文件
valid_files = []
for file_path in glob.glob(os.path.join(img_dir, "*.jpg")):
    file_name = os.path.basename(file_path)
    name_no_suffix = os.path.splitext(file_name)[0]
    if name_no_suffix.isdigit():
        img_id = int(name_no_suffix)
        if img_id < max_process_id:
            valid_files.append((img_id, file_path))
# 按数字ID排序,避免字符串排序导致的"10.jpg排在2.jpg前面"问题
valid_files.sort(key=lambda x: x[0])

# 处理图片
for img_id, img_path in tqdm(valid_files):
    for start, end, op_dir in range_mapping:
        if start <= img_id < end:
            img = cv2.imread(img_path, cv2.COLOR_BGR2RGB)
            # 此处写你的处理逻辑,结果存储到op_dir
            break

方案2:直接按ID范围拼接路径(适合文件连续命名的场景,性能最优)

不需要遍历整个目录的上万个文件,直接构造目标范围的文件路径,性能提升非常明显:

import os
import cv2
from tqdm import tqdm

img_dir = "/path/to/images"
range_mapping = [
    (0, 100, "/path/to/output/dir_1"),
    (100, 150, "/path/to/output/dir_2"),
    (150, 200, "/path/to/output/dir_3")
]

for start, end, op_dir in range_mapping:
    for img_id in tqdm(range(start, end), desc=f"处理{start}-{end-1}区间"):
        img_path = os.path.join(img_dir, f"{img_id}.jpg")
        # 可选:加文件存在判断,避免缺失文件报错
        if not os.path.exists(img_path):
            continue
        img = cv2.imread(img_path, cv2.COLOR_BGR2RGB)
        # 此处写你的处理逻辑,结果存储到op_dir

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:18:02