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

Python循环中如何递增文件索引?多文件夹图片重构原图需求

问题解决思路与修正代码

你的核心问题是用内层循环+break的方式只能拿到每个文件夹的第一张图,没法对应外层循环im的索引去取第2、3、4张。直接通过索引取值就能解决这个问题,不用再用内层循环遍历。

关键修改点:

  • 删掉遍历image_list的内层循环,直接用image_list[im]获取当前原图对应的切片(因为外层im从0到3,正好对应每个文件夹里排序后的第1到第4张图)
  • 修正x0 =+ w2的笔误,改成x0 += w2(否则x0会被直接赋值为w2,而不是累加)
  • 优化保存的文件名,去掉多余的str(i),让文件名直接对应原图序号(比如output_1.png对应第一张原图)
  • 增加判断,确保每个文件夹里至少有4张图,避免索引越界报错

修正后的代码:

from PIL import Image
from natsort import natsorted
import os

image_path = "heat_map/"
w1 = 2560
h1 = 2048
dir_list = natsorted(os.listdir(image_path))

# 创建输出目录(如果不存在)
os.makedirs("output", exist_ok=True)

for im in range(4):
    output_image = Image.new(mode="RGBA", size=(w1, h1), color="black")
    i = 0
    x0 = 0
    y0 = 0
    for folder in dir_list:
        i += 1
        folder_path = os.path.join(image_path, folder)
        image_list = natsorted(os.listdir(folder_path))
        
        # 确保文件夹里有足够的图片,避免索引越界
        if len(image_list) <= im:
            print(f"警告:文件夹 {folder} 中图片数量不足,跳过")
            continue
            
        # 直接通过im索引获取对应切片,不用内层循环
        piece_filename = image_list[im]
        piece_path = os.path.join(folder_path, piece_filename)
        piece = Image.open(piece_path)
        w2, h2 = piece.size
        
        output_image.paste(piece, (x0, y0))
        piece.close()
        
        # 调整下一个切片的位置
        if i == 3:
            x0 += w2
            y0 = 0
            continue
        y0 += h2
        if y0 < h1:
            continue
        x0 += w2
        y0 = 0    
        
    # 保存图片,文件名对应原图序号(1-4)
    output_image.save(f"output/output_{im+1}.png")
    output_image.close() 

说明:

  • 外层循环im控制当前要拼接的是第几张原图,从0到3对应4张原图
  • 每个文件夹里的图片经过natsorted排序后,用image_list[im]直接拿到对应位置的切片,完美匹配每张原图的拼接需求
  • 增加了os.makedirs("output", exist_ok=True),避免输出目录不存在时报错
  • 增加的图片数量判断,能提前发现异常文件夹,防止程序崩溃

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 03:05:25