2013-05-28 127 views
2

我使用python 2.4並試圖將unix last命令的值導出到csv文件。我無法弄清楚如何將它實際寫入每一行到一個csv文件,任何幫助將不勝感激!python寫dictreader到csv文件

import csv 

def check(user,logfile,name): 
    logfile.write('********' + name + '*********\n') 
    g = subprocess.Popen(["last",user], stdout=subprocess.PIPE) 
    stdout, stderr = g.communicate() 
    reader = csv.DictReader(stdout.splitlines(), 
          delimiter=' ', skipinitialspace=True, 
          fieldnames=['id', 'pts', 'cpu', 
             'day', 'month', 'date', 
             'time', 'dash', 'off', 
             'loggedin', 'test1', 'test2']) 

    writer = csv.writer(open('dict.csv','wb')) 
    for row in reader: 
     writer.writerow(row) 

回答

4

您需要可以使用csv.DictWriter()代替(匹配字段名),或者把字典行插入序列:

writer.row([value for key, value in sorted(row.items())]) 

將輸出其按鍵排序的值,例如。

使用DictWriter可能是那樣簡單:

writer = csv.DictWriter(open('dict.csv','wb'), fieldnames=reader.fieldnames) 

這將寫完全相同的領域,以相同的順序,因爲你的DictReader()類期待。

+0

您還需要明確寫入標頭: writer.writeheader() 否則不會寫入標頭。 – Bolaka

+0

@Bolaka:是的,但不是每個用例都需要一個標題行。 OP在這裏爲'DictReader'使用了一個明確的'fieldnames'參數,這意味着輸入文件中也沒有標題行。 –

+0

是true,並非每個usecase都需要一個標題行。它就是 - writer = csv.DictWriter(open('dict.csv','wb'),fieldnames = reader.fieldnames) - 給我的印象是它也會寫出標題。所以我認爲答案應該提到,如果有人想要寫頭,添加 - writer.writeheader() – Bolaka