2014-04-30 28 views
0

我試圖修改Splunk中csv文件中的特定列。下面的代碼不起作用,並且正在生成以下代碼。通過Python修改CSV中的特定列

External search command 'queryinc' returned error code 1. Script output = "Incident_Number,Incident_Status INC000000003050,Assigned INC000000003051,Assigned INC000000003052,Assigned INC000000003053,Assigned INC000000003054,Assigned INC000000003101,Assigned INC000000003102,Closed INC000000003103,Assigned INC000000003104,Closed " 

對我要去的地方有何想法?我是python的新手,所以如果這是基本的話,我不會感到驚訝。 si.splunkHome()只是拉動Splunk中定義的「Splunk Home」目錄。

f = open(os.path.join(si.splunkHome(),"etc","apps","integration","lookups","incidents.csv"), 'a+') 
for line in f: 
    columns = line.split(',') 
    columns[7] = '%s' % (statusResult) 
    f.write(','.join(bits)) 
    f.close() 
+0

你是如何得到錯誤信息「外部搜索命令...」的?我希望有一點不同的信息,如果你運行的代碼,你已經提出。 –

+0

這就是當我運行我在Splunk中編寫的自定義命令時Splunk拋出的內容。它工作正常,沒有這個代碼來修改csv。 – Haybuck

+0

您提供了完整的腳本內容嗎?或者你有一些'sys.exit(1)'?這將解釋爲什麼Splunk抱怨。 –

回答

0

您正試圖一次讀取和寫入同一個文件。這就是問題。

您應先閱讀文件,然後使用open(fname, "r"),並在旁邊的某處創建新內容,因此具有f2 = open(outfname, "a")(或帶有「w」模式)。

最後,您應該刪除原始的csv文件並在那裏移動新的文件。

如果你有嚴格的二進制結構,讀取和寫入相同的文件是困難的,並且通常是有效的。

import os 
fname = os.path.join(si.splunkHome(),"etc","apps","integration","lookups","incidents.csv") 
with open(fname, "r") as fr, open("tmpfile.csv", "w") as fw: 
    for line in fr: 
     columns = line.split(',') 
     columns[7] = '%s' % (statusResult) 
     fw.write(','.join(bits)) 

請注意,此代碼不運行,因爲它包含一些我不知道的外部事物。

+0

這是從前面拋出相同的錯誤,但這是一個很好的開始,因爲我認爲我看到了你要去的地方。謝謝! – Haybuck