您好,我想将列表写入.csv文件。 这是我的代码
def writeCsv(self, content):
filename = 'data.csv'
f = open(filename, 'w')
header = 'index;title;img;link;views;brand;\n'
f.write(header)
#print(len(content))
i = 0
for c in content:
f.write(c['index'] + ";" + c['title'] + ';' + c['img'] + ';' + c['link'] + ';' + c['views'] + ";\n")
#i += 1
#print(i)
f.close()
我的问题是len(content)
返回72
,但是循环只运行21次。 (我在循环中每次都打印i
,而我的.csv文件只有21行。)
write()
函数上是否缺少某些限制或未知参数?
更新:我使用了Sayse的解决方案,但添加了encoding='utf-8'
。该探棒是第22行中的非法字符
答案 0 :(得分:0)
也许尝试一下:
def writeCsv(self, content):
filename = 'data.csv'
f = open(filename, 'w')
header = 'index;title;img;link;views;brand'
f.write(header)
#print(len(content))
i = 0
for c in content:
try:
f.write(";\n"+";".join([c[k] for k in header.split(";")]))
except KeyError:
print(c)
i += 1
print(i)
f.write(";")
f.close()
使用标头作为索引更干净的imo,并将显式键访问包装在错误处理中可以帮助您克服一些麻烦。同样,根据您编写输出文件的方式,假设您已经从一定数量的相似文件中合并了数据,那么列表末尾将有一个空行。
答案 1 :(得分:0)
如评论中所述,唯一可能导致此错误的是格式错误的数据(可能是第22行),并且您捕获了更广泛的异常。
无论如何,您只应使用csv模块DictWriter
from csv import DictWriter
def writeCsv(self, content):
filename = 'data.csv'
with open(filename, 'w') as f:
field_names = ["index","title","img","link","views","brand"]
dict_writer = DictWriter(f, field_names, delimiter=";")
dict_writer.writeheader()
dict_writer.writerows(content)