Python按指定格式写入CSV文件报int不可迭代错误解决
报错原因
- 核心触发点:
zip()函数要求传入的所有参数都必须是可迭代对象(列表、数组、元组等支持遍历的类型),原代码中循环变量x是range(0,N)生成的整数(取值为0、1),整数类型不支持迭代,传入zip(x, Pe[x])就会抛出TypeError: 'int' object is not iterable错误。 - 其余逻辑问题:
- 把
csv.writer实例化的代码写在了for循环内部,每次循环都会重新创建写入对象,会导致文件写入错乱、出现多余空行 - 即使将
x转为可迭代对象(如包裹为[x]),也只会给每个分组的第一行添加标识,剩余行第一列为空,完全无法匹配目标输出格式
- 把
修正后可运行代码
import numpy as np import csv N = 2 Pe = np.array([[[128.22918457, 168.52413295, 209.72343319], [129.01598287, 179.03716051, 150.68633749], [131.00688309, 187.42601593, 193.68172751]], [[ 64.11459228, 84.26206648, 104.86171659], [ 64.50799144, 89.51858026, 75.34316875], [ 65.50344155, 93.71300796, 96.84086375]]]) with open('Test123.csv', 'w', newline='', encoding='utf-8') as f: writer = csv.writer(f) # 写入和示例对齐的表头 writer.writerow(['', 'a', 'b', 'c']) row_num = 1 for group_idx in range(N): # 遍历当前分组下的每一行数值 for data_row in Pe[group_idx]: writer.writerow([row_num] + list(data_row)) row_num += 1
代码说明
- 打开文件时添加
newline=''参数是Python csv模块的官方推荐写法,可以避免生成的CSV文件出现多余空行 - 用全局递增的
row_num作为第一列的序号,和参考示例里从1开始连续编号的格式完全对齐 - 将writer初始化移到循环外,只创建一次写入实例,保证写入格式正常
- 运行后生成的Test123.csv格式和给出的参考示例完全匹配。
内容的提问来源于stack exchange,提问作者Wiz123
相关产品推荐
相关产品推荐

