我有一个python脚本,它会在while循环中生成一堆数据。我需要将这些数据写入CSV文件,所以它是按列而不是按行写入的。
例如,在我生成的脚本的循环1中:
(1, 2, 3, 4)
我需要这反映在我的csv脚本这样:
Result_1 1
Result_2 2
Result_3 3
Result_4 4
在第二个循环中,我生成:
(5, 6, 7, 8)
我需要这样看我的csv文件,这样:
Result_1 1 5
Result_2 2 6
Result_3 3 7
Result_4 4 8
等等直到while循环结束。有人能帮我吗?
编辑
while循环可以持续超过100,000次循环
9条答案
按热度按时间cigdeys31#
csv
不支持的原因是大多数文件系统并不真正支持变长行,您应该做的是收集列表中的所有数据,然后在它们上调用zip()
来转置它们。46scxncf2#
如果您的目标只是逐列写入输出,那么这是非常简单的。
如果您的项目是列表:
wgxvkvu93#
更新行在文件中的地方是不支持在大多数文件系统(一个文件中的一行只是一些数据,以换行符结束,下一行就在这之后开始)。
在我看来你有两个选择:
1.让数据生成循环成为生成器,这样它们就不会消耗大量内存--您将“及时”地获得每行的数据
1.使用一个数据库(sqlite?)并更新行。当你完成-导出到CSV
第一种方法的小示例:
这将打印
即使
count
生成一个无穷数列0vvn1miw4#
让我们假设(1)你没有一个大的内存(2)你在一个列表中有行标题(3)所有的数据值都是浮点数;如果它们都是32位或64位的整数,那就更好了。
在32位Python中,在列表中存储一个float对象需要16个字节,在列表中存储一个指针需要4个字节; total 20.在array.array('d')中存储一个float只需要8个字节。如果你所有的数据都是int型的(有负数吗?),可以容纳8、4、2或1个字节--特别是在最近的Python中,所有的int型都是long型的。
下面的伪代码假设浮点数存储在array.array('d')中。如果你没有内存问题,你仍然可以使用这个方法;我已经在注解中指出了如果你想使用列表所需要的修改。
mwyxok5s5#
Result_*
怎么样,循环中也会生成Result_*
(因为我认为不可能添加到csv文件中)我就这样走,在一次旋转矩阵时生成所有数据写入文件:
odopli946#
逐行读入,然后在命令行中转置。如果您使用Unix,请安装csvtool并按照中的说明操作:https://unix.stackexchange.com/a/314482/186237
lh80um4z7#
作为一种替代流方法:
这两个步骤应该处理蒸刚刚好。
陷阱:
ruyhziif8#
经过思考了一段时间,我能够想出一个更简单的方法来实现同样的目标。假设你有如下代码:
c86crjj09#
zip
只接受长度等于列表最短长度的元素。如果列的长度相等,则需要使用zip_longest