CSV在列中写入列表

时间:2017-07-11 03:01:22

标签: python algorithm csv

我对使用Python的CSV编写很新,到目前为止我找不到我需要的东西。我正在运行一个算法X次(假设10个但可以是100或1000),在越来越多的条目上,收集一些数据。确切地说,我正在做以下事情:

  • 步骤1:设置算法实例大小
  • 步骤2:运行算法X次并存储每次运行的结果
  • 步骤3:增加实例大小,转到步骤2.

在第2步结束时,我有一个如下所示的列表:

每次迭代交换的消息数:
[13.181238, 10.0, 10.0, 10.0, 13.181238, 10.0, 10.0, 10.0, 16.362476, 10.0]

我想将此列表作为列写入csv文件中。然后,当我在新实例上调用算法时,我想将新列表作为我的CSV文件的新行追加,直到完成所有操作。

该文件可能如下所示:

Call 1      Call2       Call3  ... Call N
13.181238   20.0
10.0        23.181238

有可能这样做吗?

1 个答案:

答案 0 :(得分:1)

由于CSV模块支持写行(因为文件通常是逐行写入),因此这是一种实现这一目的的方法。将所有信息写入临时文件中,这样您就不必保留在内存中,并且在完成所有基准测试标记后,转动CSV文件,从而将行转换为列。

import csv
from itertools import izip
a = izip(*csv.reader(open("tempfile.csv", "rb")))
csv.writer(open("output.csv", "wb")).writerows(a)

如果你的文件存在内存,这将毫无问题地工作。

如果你必须定期重复这个,并且你希望这很快,并且你不介意引入一个巨大的依赖,请考虑大熊猫:

import pandas as pd
pd.read_csv('tempfile.csv').T.to_csv('output.csv',header=False)

作为奖励,您可以获得T操作 - 它会转移底层 数据框(使用pd.read_csv('tempfile.csv')创建)。

使用Python在CSV中做的任何事情都可以通过Pandas做得更好......