所以我有一个里面有6个dicts的列表,我想把它写到csv文件中。 我已经尝试了很多方法来做到这一点,但到目前为止我还没有成功。当我尝试将其作为列表编写时,当我尝试将其写为字典时,它会给我一个错误,它也会给我一个错误。任何人都可以指出我的写作方向。
r_vals=
[{'distance':2.35, 'mpg': 3.215, 'power': 45.0},{'distance':214.3, 'mpg': 29.3,'power': 124.0},{'distance':2.35, 'mpg': 3.215, 'power': 45.0},...{'distance':0.35, 'mpg': 45.5, 'power': 156.0}]
或者如果有更简单的方法将其作为数据帧,我希望它看起来像这样
distance mpg power
2.35 3.215 45.0
214.3 29.3 124.0
.
.
0.35 45.5 156
谢谢你!
答案 0 :(得分:5)
在熊猫中你可以这样做:
>>> r_vals
[{'distance': 2.35, 'power': 45.0, 'mpg': 3.215}, {'distance': 214.3, 'power': 124.0, 'mpg': 29.3}, {'distance': 2.35, 'power': 45.0, 'mpg': 3.215}, {'distance': 0.35, 'power': 156.0,'mpg': 45.5}]
>>> df = pandas.DataFrame(r_vals)
>>> df
distance mpg power
0 2.35 3.215 45
1 214.30 29.300 124
2 2.35 3.215 45
3 0.35 45.500 156
然后你可以做:
df.to_csv("path.csv",index=False)
并且您已将字典保存在内存中的数据框和csv中。
如果你想只使用原生python,那么你可以这样做:
import csv
outfile = open("path.csv","w")
csv_writer = csv.write(outfile)
csv_writer.writerow(header)
header = r_vals[0].keys()
for row in r_vals:
csv_writer.writerow(str([row[col_name]) for col_name in header])
outfile.close()
答案 1 :(得分:3)
“在python中使用字典元素创建一个csv文件”正是csv.DictWriter
所做的:
with open('output.csv', 'w') as f:
csv.DictWriter(f, fieldnames=rvals[0].keys()).writerows(rvals)
(如果您的最终目标是获取某种数据框对象,而您只是创建一个CSV文件,因为您认为这是最好的方式...那么您不必;请参阅Ryan G的答案pandas
如何轻松实现这一目标。)
之后:
$ cat output.csv
3.215,45.0,2.35
29.3,124.0,214.3
3.215,45.0,2.35
45.5,156.0,0.35
当然,您可能希望它包含标题和/或按特定顺序放置列,而不是dict
恰好具有的顺序。 (你不需要两个,但是如果你不做其中任何一个,那么CSV不是很有用,因为你不知道哪个列意味着什么...... )这两个:
with open('output.csv', 'w') as f:
w = csv.DictWriter(f, fieldnames='distance mpg power'.split())
w.writeheader()
w.writerows(rvals)
输出:
distance,mpg,power
2.35,3.215,45.0
214.3,29.3,124.0
2.35,3.215,45.0
0.35,45.5,156.0
如果您想要默认CSV方言的变体,请参阅Dialects and Formatting Parameters。要准确获得所需的输出,只需将, delimiter='\t'
添加到DictWriter
构造函数。
答案 2 :(得分:0)
使用制表
r_vals=[[2.35,3.215,45.0],[214.3,29.3,124.0],[2.35, 3.215,45.0],[0.35,45.5,156.0]]
print tabulate.tabulate(r_vals, headers=["distance","mpg", "power"])
distance mpg power
---------- ------ -------
2.35 3.215 45
214.3 29.3 124
2.35 3.215 45
0.35 45.5 156
答案 3 :(得分:0)
您可以使用字符串格式化来执行您想要的操作:
with open(target, 'w') as f:
f.write("distance\tmpg\tpower\n") # header
for d in r_vals:
f.write"{0[distance]:.2f}\t{0[mpg]:.3f}\t{0[power]:.1f}\n".format(d))
格式规范为格式规范0
,格式为[key]
,.nf
选择适当的值,然后n
给出{{1}}小数位。
答案 4 :(得分:0)
http://docs.python.org/2/library/csv.html#csv.DictWriter应该这样做,它还会根据您提供的列顺序编写标题行。
with open('/home/dnfehren/windesk/test.csv','wb') as fl:
fc = csv.DictWriter(fl, ['distance','mpg','power'])
for rvalnum, rval in enumerate(rvals):
if rvalnum == 0:
fc.writeheader()
fc.writerow(rval)
else:
fc.writerow(rval)