假设我们正在从具有多个键值对的某些源读取数据.我们使用以下列表作为示例:
[{'key0': 'key0_value0', 'key1': 'key1_value0'},
{'key0': 'key0_value1', 'key1': 'key1_value1'}]
Run Code Online (Sandbox Code Playgroud)
从该列表中读取第一项应该会产生如下所示的CSV:
key_header | 0
---------------------------
key0 | key0_value_0
key1 | key1_value_0
Run Code Online (Sandbox Code Playgroud)
现在阅读第二项应该导致以下结果:
key_header | 0 | 1
----------------------------------------
key0 | key0_value_0 | key0_value_1
key1 | key1_value_0 | key1_value_1
Run Code Online (Sandbox Code Playgroud)
这种情况一直持续到直到.写这个的算法超出了我的范围,我不确定csv模块是否可以工作,因为它似乎假设数据一次写入一行.
你必须首先收集所有'列',然后写.您可以通过将所有内容转换为列表列表来实现,然后使用zip(*columns)将列的列表转换为行列表:
columns = [['key_header'] + sorted(inputlist[0].keys())] # first column
for i, entry in enumerate(inputlist):
columns.append([i] + [entry[k] for k in columns[0][1:]])
with open(outputfilename, 'wb') as output:
writer = csv.writer(output)
writer.writerows(zip(*columns))
Run Code Online (Sandbox Code Playgroud)
显示行输出的演示:
>>> from pprint import pprint
>>> inputlist = [{'key0': 'key0_value0', 'key1': 'key1_value0'},
... {'key0': 'key0_value1', 'key1': 'key1_value1'}]
>>> columns = [['key_header'] + sorted(inputlist[0].keys())] # first column
>>> for i, entry in enumerate(inputlist):
... columns.append([i] + [entry[k] for k in columns[0][1:]])
...
>>> pprint(zip(*columns))
[('key_header', 0, 1),
('key0', 'key0_value0', 'key0_value1'),
('key1', 'key1_value0', 'key1_value1')]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2162 次 |
| 最近记录: |