Python CSV WriteRow数据

Python CSV WriteRow数据,python,csv,Python,Csv,我试图在csv中的行中写入两个变量。result变量(有2列/值)和'item变量(只有1个值)。我可以在writerow`函数参数中包含这两个值吗?如果是,语法会是什么样子?我下面的语法在两个变量之间用逗号表示不起作用 我说的是: writer.writerow([item,result.items()[0][0],result.items()[0][1]]) 所有代码: #!/usr/bin/env python import splunklib.client as client im

我试图在csv中的行中写入两个变量。
result
变量(有2列/值)和'item
变量(只有1个值)。我可以在
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]])

通过向
writerow
传递数组,可以将多个字段传递给它。假设
result
是一个由两个元素组成的数组,您可以这样做

writer.writerow([item,result[0],[result[1]])
或者,如果根据您的评论,
result
是一个
OrderedDict
,您可以这样做:

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

您收到了什么错误消息

使用
csv.DictWriter
时,应将字典传递给
writerow()
,而不是列表。根据我看到的情况,您可以使用一个普通的
csv.writer
对象,只需使用标题行调用
writerow()
,而不是为每次调用
writerow()
创建字典

因此,如果你像这样初始化它,我认为它会工作:

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

谢谢你的意见
Result
实际上是一个有序字典,那么如何调用
Result
数组第一项中的键/值对的值呢?可能类似于
result.keys(0)
result.keys(1)
?您可以通过
result.items()
获得键/值对。我已经用@CaptSolo的建议更新了帖子。我感谢您的输入,但遗憾的是,我的脚本无法将splunk的搜索结果输出到输出文件中。如果您想进一步研究这个问题,我有上面使用的更新代码。您正在关闭输出文件的文件句柄吗
outputCsv.close()
?它给了我以下错误:ValueError:dict包含字段名中没有的字段:queryResult1,QueryResult2我添加了一些代码,说明如何初始化一个普通的
csvwriter
,这意味着您可以将更简单的列表与
writerow()
一起使用。