Python:CSV按列而不是行写入

Har*_*pal 36 python csv

我有一个python脚本,在while循环中生成一堆数据.我需要将此数据写入CSV文件,因此它按列而不是行进行写入.

例如,在我的脚本的循环1中,我生成:

(1, 2, 3, 4)
Run Code Online (Sandbox Code Playgroud)

我需要这个在我的csv脚本中反映如下:

Result_1    1
Result_2    2
Result_3    3
Result_4    4
Run Code Online (Sandbox Code Playgroud)

在我的第二个循环中,我生成:

(5, 6, 7, 8)
Run Code Online (Sandbox Code Playgroud)

我需要这样来查看我的csv文件,如下所示:

Result_1    1    5
Result_2    2    6
Result_3    3    7
Result_4    4    8
Run Code Online (Sandbox Code Playgroud)

等等直到while循环结束.有谁能够帮我?


编辑

while循环可以持续超过100,000个循环

Ign*_*ams 37

原因csv不支持这是因为大多数文件系统都不支持可变长度的行.你应该做的是收集列表中的所有数据,然后调用zip()它们以后转置它们.

>>> l = [('Result_1', 'Result_2', 'Result_3', 'Result_4'), (1, 2, 3, 4), (5, 6, 7, 8)]
>>> zip(*l)
[('Result_1', 1, 5), ('Result_2', 2, 6), ('Result_3', 3, 7), ('Result_4', 4, 8)]
Run Code Online (Sandbox Code Playgroud)

  • 然后,您需要重新考虑数据处理. (4认同)
  • @Harpal:这是问题的重要部分。请编辑您的问题以包含此内容。 (3认同)

小智 8

wr.writerow(item)  #column by column
wr.writerows(item) #row by row
Run Code Online (Sandbox Code Playgroud)

如果您的目标只是逐列编写输出列,这非常简单.

如果您的商品是列表:

yourList = []

with open('yourNewFileName.csv', 'w', ) as myfile:
    wr = csv.writer(myfile, quoting=csv.QUOTE_ALL)
    for word in yourList:
        wr.writerow([word])
Run Code Online (Sandbox Code Playgroud)

  • `zip()` 很棒,但 `writerow()` 才是真正的交易! (3认同)

laz*_*zy1 5

大多数文件系统不支持更新文件中的行(文件中的一行只是一些以换行结束的数据,下一行就在此之后开始).

在我看来,你有两个选择:

  1. 让你的数据生成循环成为生成器,这样他们就不会消耗大量内存 - 你会及时获得每一行的数据
  2. 使用数据库(sqlite?)并更新那里的行.完成后 - 导出为CSV

第一种方法的小例子:

from itertools import islice, izip, count
print list(islice(izip(count(1), count(2), count(3)), 10))
Run Code Online (Sandbox Code Playgroud)

这将打印

[(1, 2, 3), (2, 3, 4), (3, 4, 5), (4, 5, 6), (5, 6, 7), (6, 7, 8), (7, 8, 9), (8, 9, 10), (9, 10, 11), (10, 11, 12)]
Run Code Online (Sandbox Code Playgroud)

即使count生成无限的数字序列