【发布时间】:2015-10-20 15:05:47
【问题描述】:
我有一个程序,我希望在其中记录发生的所有重大变化。例如:变量x每次变化的值记录变化的时间和变化本身。在程序中有许多这样的变化,并且并非都具有相同数量的参数。
我决定使用 namedtuples 来存储更改的每个实例,然后将这些 namedtuples 放入单个主数据列表中 - 准备导出到 csv。我使用了元组,因为它们当然是不可变的,非常适合记录保存。下面我试图以尽可能简洁的方式解释我所做的和尝试的。希望到目前为止我的问题和尝试都很清楚。
所以我有:
data = []
作为主存储库,namedtuples 的形式为:
a_tuple = namedtuple('x_change', ['Time', 'Change'])
another_tuple = namedtuple('y_change', ['Time', 'Change', 'id'])
然后,我可以在每次检测到数据更改时附加这些命名元组的实例,使用如下命令:
data.append(a_tuple(a_time, a_change))
data.append(another_tuple(a_time, a_change, an_id))
如果我打印出数据的内容,我会得到如下输出:
x_change(a_time=4, a_change=1)
y_change(a_time=5, a_change=3, an_id = 2)
y_change(a_time=7, a_change=1, an_id = 3)
x_change(a_time=8, a_change=3)
我想做的是通过元组名称将这些元组导出到 csv 文件。所以在上述情况下,我最终会得到两个 csv 文件,格式如下:
name, time, change
x_change, 4, 1
x_change, 8, 3
和;
name, time, change, id
y_change, 5, 3, 2
y_change, 7, 1, 3
到目前为止,我必须设法写入单个 csv,如下所示:
with open ('events.csv', 'w', newline='') as csvfile:
output = csv.writer(csvfile, delimiter = ',')
for row in data:
output.writerow(row)
产生的输出减去元组名称。所以:
4, 1
5, 3, 2
7, 1, 3
8, 3
我也试过了:
with open ('events.csv', 'w', newline='') as csvfile:
output = csv.writer(csvfile, delimiter = ',')
for row in data:
output.writerow(str(row))
通过获取每个字符(仅包括第一行)将文件拆分为 csv 格式,包括元组名称:
x, _, c, h, a, n, g, e, 4, 1
我已经寻找解决方案,但没有遇到任何适合我正在尝试做的事情,现在不知所措。任何帮助将不胜感激。
【问题讨论】:
标签: python csv namedtuple