2012-08-14 105 views
2

我正在爲每個數據項創建列表,我有以下數據結構,並且在迭代結束時有6個包含數據點的列表。每個列表具有相同的長度,我想生成每個列表以csv文件的列Python:將單個列表寫入csv中的列

例子:

columnOfList1, columnOfList2... 

這是我的代碼生成多個數據列表:我不能figureout是生成csv文件。

for (fn1, lst1), (fn2, lst2) in product(dict1.iteritems(), dict2.iteritems()): 
    for vector1, vector2 in zip(lst1, lst2): 
+0

您是否在使用csv模塊,寫入文件或組織數據時遇到問題? – monkut 2012-08-14 02:26:06

+0

'NameError:name'product'is not defined.'(我假設你在說'itertools.product',但是請你把它放在你的問題中嗎? – kojiro 2012-08-14 02:29:22

回答

4

正如您所說的,每個列表都有相同的長度。你爲什麼不在這個長度上做一個「for」?

例子:

for i in range(len(some_list)): 
    print lst[i], lst2[i], lst3[i], lst4[i], lst5[i] 
+0

爲什麼我沒有想到這個:) – 2012-08-14 02:57:45

+0

好,老式的編碼。我喜歡它! – philshem 2013-10-24 14:39:28

1

轉換行名單只是翻譯。它只是與zip完成:

>>> foo 
[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]] 
>>> zip(*foo) 
[(0, 0, 0, 0, 0), (1, 1, 1, 1, 1), (2, 2, 2, 2, 2), (3, 3, 3, 3, 3), (4, 4, 4, 4, 4)] 

所以你可能只是做

>>> lsts = [l[1] for l in product(yourdicts)] 
>>> csvwriter.writerows(zip(*lsts)) 
1

您可以使用numpy.savetxt這一點。首先將陣列堆疊成列:

>>> import numpy as np 
>>> col1 = np.array([1,2,3]) 
>>> col2 = np.array([4,5,6]) 
>>> output = np.vstack((col1, col2)).T 
>>> output 
array([[1, 4], 
     [2, 5], 
     [3, 6]]) 

然後寫出來。您可以傳遞一個文件名,但在這裏我使用了StringIO來顯示輸出:

>>> from StringIO import StringIO 
>>> s = StringIO() 
>>> np.savetxt(s, output, delimiter=',', fmt='%.7g') 
>>> print s.getvalue() 
1,4 
2,5 
3,6