Python不会从几个列表中将所有数据写入csv文件

时间:2016-11-18 19:30:27

标签: python csv

我正在抓取XML文件并将数据存储到多个列表中。最后,我从列表中获取数据并将其写入CSV文件。代码运行没有任何错误,但是当我检查数据后,似乎最后列表中的项目没有写入文件。最终文件中应该有大约2000行。

这是我的代码:

original

我问this主题,但我已经使用了with codecs.open("some_file.csv", 'w', encoding='utf-8') as file: writer = csv.writer(file, lineterminator='\n', delimiter=";") for a, b, c in zip(l1, l2, l3): writer.writerow([a, b, c]) 。我错过了什么?

2 个答案:

答案 0 :(得分:0)

代码看起来很好;

$ cat test.py
import codecs
import csv

l1 = ['hest', 'hat', 'test', 'more test']
l2 = ['hest2', 'hat', 'test', 'even more test']
l3 = ['hest3', 'hat', 'test', 'even even more test']

with codecs.open("some_file.csv", 'w', encoding='utf-8') as file:
    writer = csv.writer(file, lineterminator='\n', delimiter=";")

    for a, b, c in zip(l1, l2, l3):
    writer.writerow([a, b, c])

$ python test.py
$ cat some_file.csv 
hest;hest2;hest3
hat;hat;hat
test;test;test
more test;even more test;even even more test

答案 1 :(得分:0)

我想你可能想看看你的三个名单,并zip

如果列表的长度不同,那么zip会抛出有问题的列表。

#!/usr/bin/env python

import csv
import codecs

L1 = ["foo", "bar", "bat", "baz"] # <-- this guy has one more! expect to be truncated
L2 = ["hoo", "hah", "hee"] # <--note, one field less!
L3 = range(2) #<--note, only two fields long! expect entire line to be dropped!

with codecs.open("test.csv", "w", encoding="utf-8") as f:
    writer = csv.writer(f, lineterminator="\n", delimiter=";")
    for row in zip(L1, L2, L3):
        writer.writerow(row)

由于L3中只有两个值,其余的都有三个,因此zip会截断您的错误输出。

~$ cat test.csv
foo;hoo;0
bar;hah;1

当然,您会注意到我正在使用zip为三个列表中的每个索引输出一个列表值。这与您的示例不同。我不知道你在那里做了什么,但是如果这些“l”值中的每一个都代表一个列表,那么就没有必要明确地创建这些值,然后将它们添加到列表中。

再次,看到您的输入示例(如果可能)会很高兴。在构建这些列表以使其“匹配”时,可能必须插入None值(或空字符串或其他)。

L1 = ["foo", "bar", "bat", "baz"]
L2 = ["hoo", "hah", "hee", None]
L3 = range(2) + [None, None]

哪个可能会给你你想要的东西:

~$ cat test.csv
foo;hoo;0
bar;hah;1
bat;hee;
baz;;