csv writerow()遍历zip列表无数据输出,打印却正常
问题原因与解决方案
核心问题:zip对象是一次性迭代器
zip()返回的是迭代器,这类对象只能被遍历一次。你先通过print循环耗尽了items里的所有元素,之后再用同一个items变量去写CSV时,迭代器已经没有剩余元素了,所以CSV文件是空的。
解决办法
方法1:将zip结果转为列表(可重复遍历)
把zip()的结果转换成列表,列表可以被多次遍历:
# 注意:变量名建议用objects_list代替object,避免和内置关键字冲突 items = list(zip(objects_list, list1, list2, list3)) # 先打印验证 for obj, l1, l2, l3 in items: print(f"{obj.name}: {l1}/{l2}/{l3}") # 再写入CSV,此时列表还有数据 for obj, l1, l2, l3 in items: writer.writerow([obj.name, obj.department, obj.section, l1, l2, l3])
方法2:合并遍历操作(一次遍历完成两个动作)
如果不需要保留数据多次使用,直接在同一个循环里完成打印和写入:
items = zip(objects_list, list1, list2, list3) for obj, l1, l2, l3 in items: # 先打印 print(f"{obj.name}: {l1}/{l2}/{l3}") # 再写入CSV writer.writerow([obj.name, obj.department, obj.section, l1, l2, l3])
额外提示
你的变量名object是Python的内置名称,建议改成objects_list这类更清晰且不冲突的名字,避免潜在的语法问题。
内容的提问来源于stack exchange,提问作者adi bahadur
相关产品推荐
相关产品推荐

