2017-04-02 86 views
0

我想在csv文件中存储一些数据。我能够存储数据,但它看起来像这样用python存储csv头文件数据

1901,1909,1911,1913,1917 
5,5,5,4,6 

第一行是年份名称,第二行是值。 我的代码如下

import os 
import csv 
from collections import Counter 
from csv import reader 


def read_data(filename): 
    year = 3 
    with open(filename) as f: 
     next(f, None) # discard header 
     year2rel = Counter(int(line[YEAR]) for line in reader(f)) 
     return year2rel 

file_exists = os.path.isfile('mycsvfile.csv') 
def store_data(value): 
    my_dict = read_data(filename) 
    print 'my_dict: ', my_dict 
    with open('mycsvfile.csv', 'wb') as f: 
     w = csv.DictWriter(f, my_dict.keys()) 
     if not file_exists: 
      w.writeheader() 
     print 'w: ', w 
     w.writerow(my_dict) 

if __name__ == '__main__': 
    filename = '/home/rob/songs_detail.csv' 
    a = read_songs(filename) 
    b = store_data(a) 

,但我想包括头,使它看起来像

year values 
1901 5 
1909 5 
1911 5 
1913 4 
1917 6   

我试图改变我的代码,但它不为我工作得很好。我尝试了下面的东西,但没有成功。感谢您的任何提示或帮助。

def store_data(value): 
    file_exists = os.path.isfile('mycsvfile.csv') 
    my_dict = read_data(filename) 
    print 'my_dict: ', my_dict 
    with open('mycsvfile.csv', 'wb') as csvfile: 
     headers = ['year', 'values'] 
     writer = csv.DictWriter(csvfile, delimiter=',', lineterminator='\n',fieldnames=headers) 
     if not file_exists: 
      writer.writeheader() # file doesn't exist yet, write a header 

     writer.writerow({'year': my_dict[0], 'values': my_dict[1]}) 

这会给我下面的错误。

'ValueError: dict contains fields not in fieldnames: 'values', 'year' 

'

+0

'delimiter =',''会在你的文件中输入逗号,你似乎需要空格。 –

+0

你不追加到文件中,所以如果它已经存在,它就会被清除,并且你不写新的标题。 –

+0

@ Jean-FrançoisFabre然后我应该用什么来代替delimiter =',' – rob

回答

0

我解决我的问题,代码如下,可能是别人有帮助的。

def store_data(value): 
    file_exists = os.path.isfile('mycsvfile.csv') 
    my_dict = read_data(filename) 
    print 'my_dict: ', my_dict 
    print 'type of: ', type(my_dict) 
    with open('mycsvfile.csv', 'wb') as csvfile: 
     headers = ['year', 'values'] 
     writer = csv.DictWriter(csvfile, delimiter=',', lineterminator='\n',fieldnames=headers) 
     if not file_exists: 
      writer.writeheader() 
     for k, v in my_dict.items(): 
      print(k, v) 
      writer.writerow({'year': k, 'values': v}) 

其实我错过了以正确的方式添加循环,所以它的结果总是在没有标题的csv文件中。现在它根据我的要求完美地工作。