2013-11-03 28 views
3

我期待追加一個字典我有一個CSV文件中我已經有一個標題行 如果值不存在,我想寫'-999'附加字典搜索結果到CSV在python

SDict ={T1:'A',T2:'B',T4:'D') 

其中CSV文件具有的

T1,T2,T3,T4,T5 
7,8,9,10,11 

頭和預期的結果是

T1,T2,T3,T4,T5 
7,8,9,10,11 
A,B,-999,D,-999 

我試圖用代碼這樣做:

import sys 
import os 
import csv 

def GetFileHeader(Fpath): 
    i=10 
    ResFile=open (Fpath, 'r+') 
    HeaderDict={} 
    r=csv.reader(ResFile) 
    HeaderList = r.next() 
    for Header in HeaderList: 
     HeaderDict[Header]=i+1 
    print HeaderDict 
    ResFile.close() 
    return HeaderDict 


Fpath= r'Z:\temp\assaf\S2TTP\S2T_TP\modules\results\Y124\res.csv' 

Header= GetFileHeader(Fpath) 

with open(Fpath,'rb') as fin: 
    dr = csv.DictReader(fin, dialect='excel') 
    print dr 
    print dr.fieldnames 
# dr.fieldnames contains values from first row of `f`. 
with open(Fpath,'ab+') as fou: 
    dw = csv.DictWriter(fou, dialect='excel', fieldnames=dr.fieldnames) 
    fieldnames=dr.fieldnames 
    for K in fieldnames: 
     dw.writerow(Header[k]) 

回答

3

我想你可以簡單地做:

import csv 

SDict = {'T1': 'A', 'T2': 'B', 'T4': 'D'} 

with open('file.csv', 'r+b') as f: 
    header = next(csv.reader(f)) 
    dict_writer = csv.DictWriter(f, header, -999) 
    dict_writer.writerow(SDict) 

這是假設你對Python的2.X.另外,請注意不要以換行符結尾的文件,否則最終會出現類似7,8,9,10,11A,B,-999,D,-999的行。

+1

感謝, 另一個問題有關 如果CSV頭已經堅持是有可能用一個新的列 讓利更新結果時附加的頭說,在4號線,我想T6添加到頭部 – user2740068

+1

@ user2740068 :是的,行是彼此獨立的,所以你可以做這樣的事情,如果你想,例如'header.append('T6')'將T6添加到頭部並再次'dict_writer = csv.DictWriter(f,標題,-999)'使用新的標題。 – 2013-11-11 19:48:30

+1

我的頭文件是dictenery有沒有辦法比較2頭文件並追加差異? 請記住,這是一個結果文件頭是測試和其他每一行都是結果 我不希望我的標題(測試名稱)更改位置,所以其他結果會顯示incorect – user2740068