2012-10-01 81 views
3

我試圖將我的字典中的元素寫入文本文件,其中每個鍵都是列。目前有我看起來像將python字典寫入一個CSV文件,其中鍵爲列標題

import csv 
import numpy as np 



data1 = np.arange(10) 
data2 = np.arange(10)*2 
data3 = np.arange(10)*3 

writefile = '../Desktop/data.txt' 
datadict = {} 

datadict['data1'] = data1 
datadict['data2'] = data2 
datadict['data3'] = data3 


f = open(writefile, 'w') 
fieldnames = ['data1','data2', 'data3'] 
data = csv.DictWriter(writefile, fieldnames, restval='', extrasaction='ignore', dialect='excel') 

f.close() 

但它給了我錯誤「參數1必須有一個」寫「方法」。我不確定那是什麼意思。我也擔心方言='excel',但我不知道還有什麼要說的。 最後,我想有一些文件看起來像:

enter image description here

感謝

回答

4

沒有必要在所有在這裏使用DictWriter:

import csv 
import numpy as np 

data1 = np.arange(10) 
data2 = np.arange(10)*2 
data3 = np.arange(10)*3 

writefile = '../test.csv' 
fieldnames = ['data1','data2', 'data3'] 
with open(writefile, 'w') as f: 
    writer = csv.writer(f) 
    writer.writerow(fieldnames) 
    writer.writerows(zip(data1, data2, data3)) 
+0

太棒了,謝謝! –

0

試試這個:

import csv 
import numpy as np 

data1 = np.arange(10) 
data2 = np.arange(10)*2 
data3 = np.arange(10)*3 

writefile = '../Desktop/data.txt' 
datadictlist = [{'data1': data1[i], 'data2': data2[i], 'data3': data3[i]} for i in xrange(10)] 

f = open(writefile, 'w') 
fieldnames = ['data1','data2', 'data3'] 
writer = csv.DictWriter(f, fieldnames, restval='', extrasaction='ignore', dialect='excel') 
writer.writerows(datadictlist) 

f.close() 
+0

這只是給了我沒有書面的所有數據一個空文件。 –

+0

@AlexaHalford,已更新 –

+0

它現在正在打印數據(年),但格式不正確。它給了我一行[0 1 2 3 4 5 6 7 8 9],[0 2 4 6 8 10 12 14 16 18],[0 3 6 9 12 15 18 21 24 27] –

2

您應該通過類似文件的對象爲對構造函數DictWriter的第一個參數。

datalist = [{'data1': d1, 'data2': d2, 'data3': d3} for d1, d2, d3 in zip(data1, data2, data3)] 
... 
f = open(writefile, 'w') 
... 
writer = csv.DictWriter(f, ...) 
for i in xrange(10): 
    writer.writerow(datalist[i]) 
f.close() 

更簡單的類比情況:

with open(writefile, 'w') as f: 
    writer = csv.writer(f) 
    for row in zip(data1, data2, data3): 
     writer.writerow(row) 
+0

這給了我一個錯誤,因爲該文件不存在。當我在那裏放置一個空文件時,它會返回空文件。 –

+0

固定,再試一次)(我忘了''w''修飾,你應該關閉文件或沖洗它) – defuz

+0

我做了,但我仍然最終得到一個空文件 –

0

把 'A +',而不是 'W'

f = open(writefile, 'a+') 
1

如果你正在進行這種數據分析,它看起來像如果你可能在這裏做,最好的辦法可能是進入​​,Python的專用數據分析庫。

下面是一個例子,你想要做什麼:

import pandas as pd 
import numpy as np 

data1 = np.arange(10) 
data2 = np.arange(10)*2 
data3 = np.arange(10)*3 

df = pd.DataFrame(zip(data1, data2, data3), columns=['data1', 'data2', 'data3']) 
df.to_csv('myfile.csv') 

漂亮整潔的我說。此外,您現在可以使用allsortsunimaginablethings與您的數據。

您也可以從現有的字典進行DataFrame

In [115]: a_dict = {'foo':[1,2,3], 'bar':[4,5,6], 'baz':[7,8,9]} 

In [116]: pd.DataFrame(a_dict) 
Out[116]: 
    bar baz foo 
0 4 7 1 
1 5 8 2 
2 6 9 3 
相關問題