for循环仅运行21次

时间:2020-01-19 20:51:54

标签: python csv

您好,我想将列表写入.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行中的非法字符

2 个答案:

答案 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)