2010-04-13 128 views
2

我有兩種類型的文件名蟒蛇文件操作

/tmp/dir/abc-something-server.log

/tmp/dir/xyz-something-server.log

..

..

/tmp/dir/something-client.log

我需要添加幾行(這些線是不變的),以文件結束的/ tmp目錄/目錄與 「client.log」

line 1

line 2

line 3

line 4

追加這幾行字的文件結尾 「client.log」

是的,我發現打開()「一個」選項將提供所需的結果。但如何選擇正確的文件,排除server.log並選擇client.log?

和對文件的結束與

我需要追加的關鍵詞後說「之後,這個」「的server.log」。 「server.log」文件有多個「After-this」條目,我需要找到「After-this」的第一個條目,並在上面追加上述四行,保留其餘文件。

任何幫助將不勝感激:)提前致謝。

+0

是不是在追加代替 「插入」?附加一個文件是可能的,但插入中間沒有某種(臨時)複製是不是我相信。如果文件仍然被客戶端或服務器打開,則複製時可能會發生奇怪的事情。 – extraneon 2010-04-13 09:29:10

+0

yes..for server.log文件它插入中間..不附加。 沒有進程仍在使用這些文件 - 所以這不會成爲問題。 – 2010-04-13 09:34:12

+0

好問題;清楚你所追求的是什麼以及爲什麼。 – 2010-04-13 10:55:47

回答

3

沒有測試

import os,glob,fileinput 
root="/tmp" 
path=os.path.join(root,"dir") 
alines=["line 1\n","line 2\n","line 3\n","line 4\n"] 
os.chdir(path) 
# for clients 
for clientfile in glob.glob("*.client.log"): 
    data=open(clientfile).readlines() 
    data.append(alines) 
    open("temp","w").write(''.join(data)) 
    os.rename("temp",clientfile) 
for svrfile in glob.glob("*.server.log"): 
    f=0 
    for line in fileinput.FileInput(svrfile,inplace=1): 
     ind=line.find("After-this") 
     if ind!=-1 and not f: 
      line=line[:ind+10] + ''.join(alines) + line[ind+10:] 
      f=1 
     print line 
+0

我會測試它,讓你知道狀態..感謝:) – 2010-04-13 09:44:36

+0

它說類型錯誤...如何解決這個問題? >開( 「TEMP」, 「W」)寫( '' 連接(數據)。) >類型錯誤 ,我認爲有一個錯字--- 是 >線=行[:IND + 10] +''.join(alist)+ line [ind + 10:] 或 > line = line [:ind + 10] +''.join(alines)+ line [ind + 10:] – 2010-04-13 10:30:00

+0

see edit 。 'data = data.append(alines)'應該只是'data.append(alines)'。是的,它是另一個的錯字。你可以對它進行測試嗎?用解釋器運行並找出答案。 – ghostdog74 2010-04-13 10:50:28