2013-02-20 70 views
1

我在http://stardict.sourceforge.net/Dictionaries.php下載的格式數據如下:寫入一個CSV與字典鍵文件列名

{Color: Red, Age: 29, Date: October 2nd, Time: 4pm} 

而且我想以這樣的方式來寫這些類型的字典到CSV的「顏色,年齡,日期,時間「是列標題,並且字段以行的形式提交。這樣,當我再次讀取csv文件時,我以上述相同的方式獲得格式化的數據。

這是怎麼回事?

回答

2

使用標準csv module可以使用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) 

閱讀:

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'}] 
3

它很容易與大熊貓做到這一點:

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

輸出是:

A,B,C 
1.0,2.0,foo 
100.0,20.0,bar 
0.1,0.2,xyz 

要加載CSV:

buf.pos = 0 
print pd.read_csv(buf) 

輸出爲:

 A  B C 
0 1.0 2.0 foo 
1 100.0 20.0 bar 
2 0.1 0.2 xyz 
2

如果你想使用一個標準庫,你可以這樣做:

>>> import csv 
>>> dicts = [{'Color': 'Red', 'Age': '29', 'Date': 'October 2nd', 'Time': '4pm'}, {'Color': 'Yellow', 'Age': '30', 'Date': 'September 3rd', 'Time': '5pm'}] 
>>> with open('test.csv', 'wb') as csvfile: 
    writer = csv.writer(csvfile, delimiter=',', 
        quotechar='|', quoting=csv.QUOTE_MINIMAL) 
    for d in dicts: 
     writer.writerow([d['Color'], d['Age'], d['Date'], d['Time']]) 

您將獲得一個CSV文件輸出如下兩種不同的線::

Red,29,October 2nd,4pm 
Yellow,30,September 3rd,5pm 
1

您可以使用csv庫並從任意數據行中提取密鑰名稱。

import csv 

file = open('filename', 'w') 
writer = csv.writer(file) 

writer.write(rows[0].keys()) 
for row in rows: 
    writer.write(row)