[英]Write a list of integer into csv row-wise
我正在尝试将 float 或 int 列表逐行写入 csvfile。
出于某种原因,如果列表由字符串组成,我可以编写它们
import csv
even_numbers = ['2','4','6','8'] # list of strings
header = ['even numbers']
with open('even_numbers.csv', 'w', newline='') as csvfile:
writer = csv.writer(csvfile)
writer.writerow(header)
writer.writerows(even_numbers)
但是当有整数时会引发错误
import csv
even_numbers = [2,4,6,8] # list of integers
header = ['even numbers']
with open('even_numbers.csv', 'w', newline='') as csvfile:
writer = csv.writer(csvfile)
writer.writerow(header)
writer.writerows(even_numbers)
错误
---------------------------------------------------------------------------
Error Traceback (most recent call last)
<ipython-input-15-ae817296f34e> in <module>
6 writer = csv.writer(csvfile)
7 writer.writerow(header)
----> 8 writer.writerows(Even_list)
Error: iterable expected, not int
我可以通过哪些其他方式逐行向 csv 写入列表?
writerows() 方法需要一个列表列表。 行是一个列表,行是这些列表。
两种解决方案,取决于你想要什么:
even_numbers = [[2, 4, 6, 8]]
或者
even_numbers = [[2], [4], [6], [8]]
要自动进行后一种转换,请使用:
rows = [[data] for data in even_numbers]
writer.writerows(rows)
根据文档, writeRows
方法需要一个行对象列表作为参数。
您还可以在此处查看行 object的定义。
那是:
对于 Writer 对象,行必须是字符串或数字的可迭代对象,对于 DictWriter 对象,必须是将字段名映射到字符串或数字的字典(首先通过 str() 传递它们)。
您收到此消息的原因是它试图将该列表中的每个 int 转换为一行本身。 它适用于字符串的原因是字符串本身是可迭代的。 但是,我怀疑如果您在字符串列表中尝试了多个数字,如下所示:
even_numbers = ['24','45','66','82'] # list of strings
它可能会将每个数字拆分为行中的列,因为它将字符串作为行 object 读取。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.