Python循环输出保存CSV失败:writerows()参数错误排查
解决Python写入CSV时的TypeError问题
错误原因
你调用writerows()时直接传入了5个独立参数(推文ID、创建时间等),但这个方法只接受一个参数——一个包含多行数据的可迭代对象(比如每个元素是一行数据的列表或元组)。
修正方案
方案1:逐行写入(用writerow())
用writerow()(注意是单数)处理单条推文,把每个推文的5个字段打包成一个列表/元组,再传给方法:
import csv # 打开文件,指定utf-8编码避免乱码,newline=''防止空行 with open('tweets.csv', 'w', newline='', encoding='utf-8') as csv_file: writer = csv.writer(csv_file) # 先写入表头 writer.writerow(['推文ID', '创建时间', '用户名', '语言', '文本']) # 遍历数据集写入每一行 for tweet in tweets: # 将当前推文的字段打包成列表 current_row = [tweet.id, tweet.created_at, tweet.username, tweet.lang, tweet.text] writer.writerow(current_row)
方案2:批量写入(用writerows())
如果想一次性写入所有数据,先把所有行(包括表头)收集到一个大列表里,再传给writerows():
import csv # 初始化列表存储所有行数据 all_rows = [] # 添加表头 all_rows.append(['推文ID', '创建时间', '用户名', '语言', '文本']) # 遍历数据集收集每一行 for tweet in tweets: all_rows.append([tweet.id, tweet.created_at, tweet.username, tweet.lang, tweet.text]) # 写入文件 with open('tweets.csv', 'w', newline='', encoding='utf-8') as csv_file: writer = csv.writer(csv_file) writer.writerows(all_rows) # 传入包含所有行的列表,符合参数要求
关键注意点
- 区分
writerow()和writerows():前者写单行,参数是单个列表/元组;后者写多行,参数是包含多个列表/元组的可迭代对象。 - 必须指定
encoding='utf-8',否则推文里的特殊字符或非英语内容容易乱码。 - 加上
newline=''是csv模块的官方推荐写法,能避免Windows系统下生成的CSV出现额外空行。
内容的提问来源于stack exchange,提问作者Giuse Esse
相关产品推荐
相关产品推荐

