学习参考文章
今天在使用python 将list写入csv中时,遇到Error: iterable expected, not int
def write_data_to_csv(self):
print(self.title_list)
print(self.perf_info_list)
print(type(self.perf_info_list))
if self.cvs_file_exist() and self.read_cvs_file():
with open(self.file_path, 'a+', newline='', encoding='utf-8')as f:
f_csv = csv.writer(f)
f_csv.writerows(self.perf_info_list)
else:
with open(self.file_path, 'a+', newline='', encoding='utf-8')as f:
f_csv = csv.writer(f)
f_csv.writerow(self.title_list)
f_csv.writerows(self.perf_info_list)
Traceback (most recent call last):
File "C:/Users/baosenzhang/PycharmProjects/NewsPerformanceData/analyse_perf_data.py", line 101, in <module>
resultjsonlog.txt
handle_perf_info.write_data_to_csv()
File "C:\Users\baosenzhang\PycharmProjects\NewsPerformanceData\save_perf_info.py", line 46, in write_data_to_csv
f_csv.writerows(self.perf_info_list)
_csv.Error: iterable expected, not int
复盘:
1.问题根源:
①不熟悉csv模块,将csv 模块里的Writer 对象的两个方法:csvwriter.writerow(row)与csvwriter.writerows(rows)搞混了
2.解决问题过程
①Google搜索:iterable expected, not int
②搜到stackoverflow上的帖子:Python list to csv throws error: iterable expected, not numpy.int64
③ 查看python官方文档csv 模块
3.问题具体剖析
大白话:
①csvwriter.writerow(row)解决的是输入一行内容,csvwriter.writerow(list1)将列表list1中的所有元素输入到文件一行。不需考虑太多。
②csvwriter.writerows(rows)解决的是输入多行内容,csvwriter.writerows(list1)将列表list1中的元素输入到文件多行,列表list1中的每个元素占一行,list1中的元素需为“可迭代的元素”,字符串是可迭代,整数是不可迭代的。