2016-02-29 41 views
3

我想寫2個變量到我的CSV中的行。 result變量(它有2列/值)和'item variable (which has just 1 value). Can I include both of these values in the writerow`函數參數?如果是這樣,語法將如何顯示?我的語法如下,兩個變量之間的逗號不起作用。CSV WriteRow數據

行我說的是:

writer.writerow([item,result.items()[0][0],result.items()[0][1]]) 

的所有代碼:

#!/usr/bin/env python 

import splunklib.client as client 
import splunklib.results as results 
import csv 

listOfAppIDs = [] 
with open('filefolder/filelocation.txt', 'r') as fi: 
    for line in fi: 
     listOfAppIDs.append(line.rstrip('\n')) 
listOfAppIDs.sort() #alphebetically sort list 

HOST = "ipAddress" 
PORT = 1234 
USERNAME = "uName" 
PASSWORD = "pWord" 

startPoint = "firstAppInList" 

outputCsv = open('filefolder/filelocation.csv', 'wb') 
fieldnames = ['appID', 'TotalDestinationIPAddresses', 'AverageThroughputPerMonth'] 
writer = csv.DictWriter(outputCsv, fieldnames=fieldnames) 
writer.writeheader(); 

def connect(): 
    global startPoint , item 

    service = client.connect(
     host=HOST, 
     port=PORT, 
     username=USERNAME, 
     password=PASSWORD, 
     autologin=True 
    ) 

    jobs = service.jobs 
    kwargs_blockingsearch = {"exec_mode": "blocking"} 

    try: 
     for item in listOfAppIDs: 
      if (item >= startPoint): 
       searchquery_blocking = "splunkQuery" 
       print item + ':' 
       job = jobs.create(searchquery_blocking, **kwargs_blockingsearch) 
      for result in results.ResultsReader(job.results()):    
       writer.writerow([item,result.items()[0][0],result.items()[0][1]])#writes data underneath the column header 
    except csv.Error: 
     startPoint = item 
     connect() 

connect() 
outputCsv.close() 

答:

writer.writerow([item,result.items()[0][1],result.items()[1][1]]) 

回答

4

您可以通過將一個數組傳遞多個領域writerow。假設result是兩個元素的數組,你可以這樣做

writer.writerow([item,result[0],[result[1]]) 

,或者resultOrderedDict,按您的評論,你可以這樣做:

writer.writerow([item,result.items()[0][0],result.items()[0][1]]) 
+0

謝謝您的輸入。 'Result'實際上是一個有序的字典,那麼我怎樣在'result'數組的第一項中調用鍵/值對的值?也許像'result.keys(0)'和'result.keys(1)'? – pHorseSpec

+1

您可以通過'result.items()' – CaptSolo

+0

獲得鍵/值對我已經使用@ CaptSolo的建議更新了該帖子。 – Jaco

2

什麼錯誤訊息您收到?

使用csv.DictWriter時應將字典傳遞給writerow(),而不是列表。根據我所看到的,您可以使用正常的csv.writer對象,並且只需將writerow()與您的標題行一起使用,而不是爲每個writerow()調用創建一本字典。

所以,如果你初始化像這樣,我認爲它會工作:

writer = csv.writer(outputCsv) 
writer.writerow(fieldnames); 
+0

它給了我下面的錯誤: ValueError:dict包含不在字段名中的字段:queryResult1,queryResult2 – pHorseSpec

+0

我爲如何初始化一個普通'csvwriter'添加了一些代碼,這意味着您可以使用'writerow()'使用更簡單的列表。 – smsearcy