2012-05-18 67 views
1

我已經想出了這個練習的兩個不同的功能。一個使用csv類編寫器,另一個使用DictWriter類。兩者都通過了列出的預期結果,但是,他們未通過私人測試案例?Pyschools主題13問題9 csv.writer

import csv 
def csvWriter(filename, records): 
    header = [] 
    for i in records: 
     if len(i) < 1: 
      records.remove(i) 
    for i in records: 
     for v in i: 
      if v not in header: 
      header.append(v) 
    for i in records: 
     if len(i) == 0: 
      return '0 records processed.' 
    test=open(filename,'w') 
    wr = csv.writer(test,header,lineterminator='\n') 
    wr.writerow(header) 
    for i in records: 
     wr.writerow(i.values()) 
    test.close() 
    return '%d records processed.' % len(records) 

csvWriter( '文件名',[{ 'A':1, 'B':2},{ '一個':3, 'B':4}]

再版(開放( 'filename')。read())--->'a,b \ n1,2,\ na,b \ n3,4'檢查

'2 records passed。'--->'2記錄過去了。」 檢查

私人測試案例--->失敗?

回答

1

這個函數在私人測試用例上失敗的原因是,第二個參數可以被傳遞,值將被寫入而不被排序。

import csv 
def csvWriter(filename, records): 
    header = [] 
    for i in records: 
    if len(i) < 1: 
     records.remove(i) 
    for i in records: 
    for v in i: 
     if v not in header: 
     header.append(v) 
    for i in records: 
    if len(i) == 0: 
     return '0 records processed.' 
    test=open(filename,'w') 
    dict_wr = csv.DictWriter(test,header,lineterminator='\n') 
    dict_wr.writerow(dict(zip(header,header))) 
    for i in records:  
    # Adding in the **sorted** built-in fixed it 
    dict_wr.writerow(dict(zip(header,sorted(i.values())))) 
    test.close() 
    return '%d records processed.' % len(records) 

還是挺粗糙的,我們還沒有設想使用csv模塊。我要回過頭來改進,並在沒有模塊的情況下試一試。

有什麼建議嗎?