使用 dict 键作为列名写入 CSV 文件

use*_*000 4 python csv file

我有字典格式的数据如下:

{Color: Red, Age: 29, Date: October 2nd, Time: 4pm}
Run Code Online (Sandbox Code Playgroud)

我想以“颜色、年龄、日期、时间”是列标题的方式将这些 dicts 写入 csv,并将字段作为行归档。这样,当我再次读取 csv 文件时,我得到的数据格式与上述相同。

解决这个问题的正确方法是什么?

Cla*_*dio 6

使用标准csv 模块,您可以使用DictWriterDictReader类来实现您想要的。

写作:

import csv

dics = [{'Color':'Red', 'Age':29, 'Date':'October 2nd', 'Time':'4pm'},
        {'Color':'Blue', 'Age':32, 'Date':'December 5th', 'Time':'6pm'},
        {'Color':'Green', 'Age':12, 'Date':'January 10th', 'Time':'2pm'}]

with open("file.csv",'wb') as f:
   # Using dictionary keys as fieldnames for the CSV file header
   writer = csv.DictWriter(f, dics[0].keys())
   writer.writeheader()
   for d in dics:
      writer.writerow(d)
Run Code Online (Sandbox Code Playgroud)

阅读:

import csv

with open("file.csv", 'rb') as f:
   reader = csv.DictReader(f)
   dics = [ d for d in reader ]

>>> dics
[{'Color': 'Red', 'Date': 'October 2nd', 'Age': '29', 'Time': '4pm'},
 {'Color': 'Blue', 'Date': 'December 5th', 'Age': '32', 'Time': '6pm'},
 {'Color': 'Green', 'Date': 'January 10th', 'Age': '12', 'Time': '2pm'}]
Run Code Online (Sandbox Code Playgroud)


HYR*_*YRY 5

使用 Pandas 很容易做到这一点:

import pandas as pd

data = [
    {"A":1.0, "B":2.0, "C":"foo"},
    {"A":100, "B":20, "C":"bar"},
    {"A":0.1, "B":0.2, "C":"xyz"},
]

df = pd.DataFrame(data)

from StringIO import StringIO
buf = StringIO()
df.to_csv(buf, index=False) # convert DataFrame to csv
print buf.getvalue()
Run Code Online (Sandbox Code Playgroud)

输出是:

A,B,C
1.0,2.0,foo
100.0,20.0,bar
0.1,0.2,xyz
Run Code Online (Sandbox Code Playgroud)

要加载 csv:

buf.pos = 0
print pd.read_csv(buf) 
Run Code Online (Sandbox Code Playgroud)

输出是:

      A     B    C
0    1.0   2.0  foo
1  100.0  20.0  bar
2    0.1   0.2  xyz
Run Code Online (Sandbox Code Playgroud)