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

Python程序无法生成CSV文件:writerows()函数报错求助

解决CSV写入报错及图像像素导出问题

错误原因分析

  1. writerows()方法误用:该方法要求传入多行数据的可迭代对象(如列表嵌套列表),但你传入的results是单个像素的行列表[x,y,r,g,b]。程序会尝试迭代列表里的每个整数,把它们当成独立行,因此触发_csv.Error: iterable expected, not int报错。
  2. 文件操作位置错误:将open()放在双层循环内,每次循环都会以w模式清空文件重写,最终CSV只会保留最后一个像素的数据,且表头会被重复写入。
  3. 图像尺寸获取错误:Image.size返回(宽度, 高度),你把width和height都设为image.size[1],导致只遍历了图像的高度范围,没有覆盖完整图像区域。

修复后的代码

import csv
from PIL import Image

# 读取图像并获取正确尺寸
image = Image.open("S45-3-4.jpg")
width = image.size[0]  # 正确获取图像宽度
height = image.size[1] # 正确获取图像高度
pix = image.load()

# 定义CSV表头
headers = ['x', 'y', 'r', 'g', 'b']

# 仅打开一次文件,避免重复覆盖
with open('seed45-3-4.csv', 'w', newline='', encoding='utf-8') as f:
    writer = csv.writer(f, delimiter=';')
    # 写入表头(仅执行一次)
    writer.writerow(headers)
    # 遍历所有像素并写入数据
    for x in range(height):
        for y in range(width):
            r, g, b = pix[x, y]
            # 用writerow()写入单行像素数据
            writer.writerow([x, y, r, g, b])

额外优化说明

如果图像像素量很大,可先将所有像素数据收集到一个列表中,再用writerows()一次性写入,减少IO操作次数:

# 示例:先收集所有数据再写入
all_data = [headers]
for x in range(height):
    for y in range(width):
        r, g, b = pix[x, y]
        all_data.append([x, y, r, g, b])

with open('seed45-3-4.csv', 'w', newline='', encoding='utf-8') as f:
    writer = csv.writer(f, delimiter=';')
    writer.writerows(all_data)

内容的提问来源于stack exchange,提问作者Станислав Ведмедев

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 07:33:15