3

我正在尝试将字典中的元素写入一个文本文件,其中每个键都是一列。目前我有一些看起来像的东西

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',但我不知道还能放什么。最后,我想要一个看起来像这样的文件:

在此处输入图像描述

谢谢

4

5 回答 5

8

这里根本不需要使用 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))
于 2012-10-01T21:54:32.040 回答
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)
于 2012-10-01T20:57:40.740 回答
1

如果您正在做看起来可能在这里做的那种数据分析,那么最好的选择可能是进入pandasPython 的专用数据分析库。

这是一个执行您想要的示例的示例:

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

我会说很整洁。此外,您现在可以您的数据做各种 难以想象事情。

您还可以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
于 2015-05-29T11:31:37.473 回答
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()
于 2012-10-01T20:55:26.527 回答
0

放“a+”而不是“w”

f = open( writefile, 'a+' )
于 2012-10-01T21:54:06.017 回答