Python CSV WriteRow数据
我试图在csv中的行中写入两个变量。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
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()
一起使用。