我想你可能想看看你的三个列表和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;;
你为什么荏苒与自己的列表?一个b和c都会是一回事。 – Carcigenicate
假设这意味着'zip(l1,l2,l3)',你能否确认l1','l2'和'l3'的长度都是相同的?如果它们长度不一样,你可能需要['itertools.zip_longest()'](https://docs.python.org/3.0/library/itertools.html#itertools.zip_longest)。 –
您是否以任何方式终止您的程序?试着在'writerow'之前使用'print'打印出值。看看问题是出现在循环中还是与“编写器”相关 –