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

如何无需二次遍历,生成同名json与jpg文件的元组列表?

解决方案:一次遍历生成同名JSON/JPG元组列表

嘿,这个需求我很熟悉,咱们完全可以在一次遍历文件夹的过程中完成文件筛选和配对,不用再二次处理已有的文件列表,效率更高还更简洁。

核心思路

我们可以用一个字典来按「文件名前缀」(也就是去掉.json/.jpg后缀的部分)分组:

  • 遍历文件夹里的每个文件,先筛选出.json和.jpg文件
  • 把每个文件放到对应前缀的列表里
  • 最后遍历字典,把每个前缀对应的两个文件转成元组

完整代码实现

import os
import re

# 初始化字典用来分组同名文件
file_groups = {}
target_folder = 'Z:/data'

for filename in os.listdir(target_folder):
    # 匹配后缀为json或jpg的文件(正则更严谨,确保后缀在末尾)
    if re.match(r'.*\.(json|jpg)$', filename):
        # 提取不带后缀的文件名前缀
        name_prefix = os.path.splitext(filename)[0]
        # 将文件加入对应前缀的分组
        if name_prefix not in file_groups:
            file_groups[name_prefix] = []
        file_groups[name_prefix].append(filename)

# 生成最终的元组列表,sorted确保json在前、jpg在后
result = [tuple(sorted(files)) for prefix, files in file_groups.items() if len(files) == 2]
print(result)

代码细节说明

  1. 一次遍历完成筛选+分组:遍历文件夹时直接处理每个文件,不用先生成完整的文件列表再二次遍历,节省内存和时间
  2. 用os.path.splitext提取前缀:比自己写正则切割后缀更稳妥,能处理文件名里包含多个.的情况(比如image.v2.json)
  3. sorted保证元组顺序:排序后.json会排在.jpg前面,确保元组格式是('xxx.json', 'xxx.jpg')
  4. 长度判断避免异常:如果某个前缀只有json或只有jpg,会自动跳过,避免生成不完整的元组

如果你的文件夹里每个前缀都一定同时存在json和jpg,可以去掉if len(files) == 2的判断,直接生成元组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:55:48