如何用Python垂直编写csv?

时间:2018-05-13 13:39:28

标签: python csv

我想要一个像这样设计的CSV:

   A      B     C     D   
 ------ ----- ----- ----- 
  v1     v11   v12   v13  
  v2     v21   v22   v23  
  v3     v31   v32   v33  

我有这样的字典:

{"v1": ["v11", "v12", "v13"], "v2": ["v21", "v22", "v23"], "v3": ["v31", "v32", "v33"]}

我已经尝试过了:

with open("cyclesAndSignalChange.csv", 'wb') as csvfile:
    wr = csv.DictWriter(csvfile, cycle_with_signal_change.keys(), delimiter = ' ')
    for i in cycle_with_signal_change:
        wr.writeheader()
        wr.writerow(cycle_with_signal_change)

但是这只给了我一个1GB的大文件,而我的数据就像是1MB。

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:1)

您正在为字典中的每个键编写整个字典,因此您输出的是指数量的数据;您为每行添加标题 只会增加损坏。

您需要在此处将每个键值对视为一行:

NavigationEnd

这将输出arbitrary order中的键值对;如果您需要具有特定排序,请先排序或使用有序数据结构。

答案 1 :(得分:0)

为什么不使用pandas执行此任务?即:

import pandas as pd
test = {"v1": ("v11", "v12", "v13"), "v2": ("v21", "v22", "v23"), "v3": ("v31", "v32", "v33")}
df = pd.DataFrame.from_items(test.items(), orient='index',  columns=['B','C','D'])
df.index.name = 'A'
df.to_csv("test.csv", sep='\t', encoding='utf-8')

test.csv

A   B   C   D
v1  v11 v12 v13
v2  v21 v22 v23
v3  v31 v32 v33

PS: 如果您需要花哨 ------ ----- ----- -----,只需在csv标题后以编程方式附加它,但请记住,在解析csv文件时,您必须跳过此行。