2012-10-01 4 views
3

각 키가 열이 될 텍스트 파일에 사전의 요소를 쓰려고합니다. 현재 나는 뭔가 보이는 것 같습니다.열 머리글로 키가있는 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

가 고정되었으므로 다시 시도하십시오.) (수정하지 못하고 파일을 닫거나 플러시해야합니다.) – defuz

+0

빈 파일로 끝났습니다. –

0

넣어 'A +'대신에 'w'

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

당신이 일종의 데이터 분석을하고 있다면 그것은 좋아 보인다. e 일을하고 있을지 모르지만, 최선의 방법은 파이썬의 전용 데이터 분석 라이브러리 pandas에 들어가는 것입니다.

여기 당신이 원하는 않는 예입니다 : 내가 말하고 싶지만 꽤 깔끔한

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') 

합니다. 또한 데이터에 allsorts (unimaginablethings)을 추가 할 수 있습니다.

또한 기존 사전에서 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