You need to enable JavaScript to run this app. Python嵌套循环问题:如何循环复用JSON文件分批次处理urls.txt
优惠活动
大模型
产品
解决方案
定价
更多

Python嵌套循环问题:如何循环复用JSON文件分批次处理urls.txt

现有代码的核心问题
  • 外层循环使用for j in range(0, itr_length)遍历JSON文件,本身就是固定跑完一轮就终止的逻辑,没有设置索引归零的分支,自然会在遍历完所有JSON后退出流程
  • 在j == itr_length-1的判断分支里直接触发return,会跳出整个UrlCall函数,根本没有后续处理剩余URL的逻辑
  • 行读取逻辑存在偏差:readlines(20)的入参是最大读取字节数,不是按行数读取,没法精准控制每100行切换JSON的规则
  • 嵌套循环层级混乱,把计数切批次、JSON切换、函数退出的逻辑全部耦合在一起,没有做模块化解耦
优化实现方案

核心思路是把「JSON循环复用」和「按固定批次切分URL」两个独立逻辑拆开实现,完全避免手写冗余的索引重置判断:

  • 调用标准库itertools.cycle生成JSON文件的无限迭代器,遍历完一轮后自动回到列表开头的第一个文件,不需要手动写循环重置代码
  • 预先按行读取urls.txt内容,之后按每100行切分为独立的URL批次,每个批次对应从迭代器取一个当前要使用的JSON文件
  • 移除提前触发的return逻辑,当所有URL批次处理完成后循环自然结束
import glob
import time
from itertools import cycle

# 配置参数
batch_size = 100
JSON_KEY_FILE_PATH = "json_files/"
JSON_FILENAME = '*.json'

# 加载指定路径下的所有JSON文件
json_file_list = glob.glob(JSON_KEY_FILE_PATH + JSON_FILENAME, recursive=True)
if not json_file_list:
    raise FileNotFoundError("指定路径下未找到任何匹配的JSON文件")

# 生成无限循环的JSON迭代器,自动实现用完一轮从头复用的效果
json_cycle = cycle(json_file_list)

def UrlCall(URL_FILE):   
    # 一次性按行读取所有URL,过滤掉空行,避免逐行读取的效率损耗
    with open(URL_FILE, mode='r', encoding='utf-8') as f:
        all_url_lines = [line.strip() for line in f if line.strip()]
    
    # 按固定批次大小切分URL列表
    for batch_start in range(0, len(all_url_lines), batch_size):
        current_url_batch = all_url_lines[batch_start: batch_start + batch_size]
        # 每个批次自动取下一个循环到的JSON文件
        current_json = next(json_cycle)

        print(f"===== 开始处理第 {batch_start//batch_size + 1} 个URL批次 =====")
        print(f"当前使用JSON配置文件: {current_json}")
        print(f"本批次待处理URL数量: {len(current_url_batch)}")

        # 在此处插入实际用指定JSON处理单条URL的业务逻辑
        for url in current_url_batch:
            # process_url_with_config(url, current_json)
            pass

        # 可根据业务需要设置批次处理间隙的等待时间
        time.sleep(1)
效果校验

以5个JSON文件、总共1250条URL的场景为例:

  • 前100行使用1.json处理,接下来100行依次用2.json、3.json、4.json、5.json
  • 第501-600行会自动切回1.json配置,完全匹配“所有JSON用完一轮后从头复用”的要求
  • 整个流程不会在JSON遍历完一轮后提前退出,会持续处理直到所有URL行完成运算

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 14:06:02