2016-08-02 130 views
0

我一直在玩Python,試圖編寫一個腳本來掃描特定文件的目錄,查找某些關鍵字並將這些關鍵字出現的行保存到新文件中。我想出了這個;解析Python文本並保存爲html

import sys, os, glob 

for filename in glob.glob("./*.LOG"): 
with open(filename) as logFile: 
name = os.path.splitext(logFile.name)[0] 
newLOG = open(name + '_ERROR!'+'.LOG', "w") 
allLines = logFile.readlines() 
logFile.close() 
printList = [] 

for line in allLines: 
    if ('ERROR' in line) or ('error' in line): 
    printList.append(line) 

for item in printList: 
    # print item  
    newLOG.write(item) 

這一切都不錯,但我想我會嘗試,而不是保存這個新文件的HTML包裝這一切的權利標籤(HTML,頭部,身體...),所以,也許我可以改變字體關鍵字的顏色。到目前爲止,它看起來像這樣;

import sys, os, glob 

for filename in glob.glob("./*.LOG"): 

with open (filename) as logFile: 
    name = os.path.splitext(logFile.name)[0] 
    newLOG = open(name + '_ERROR!'+'.html', "w") 
    newLOG.write('<html>') 
    newLOG.write('<head>') 
    newLOG.write('<body><p>') 

    allLines = logFile.readlines() 
    logFile.close() 
    printList = [] 

    for line in allLines: 
     if ('ERROR' in line) or ('error' in line): 
     printList.append(line) 

    for item in printList: 
     # print item 

     newLOG.write('</html>') 
     newLOG.write('</head>') 
     newLOG.write('</body><p>') 
     newLOG.write(item) 

現在的問題是,我新來這個,我仍然試圖找出如何與壓痕工作和循環。由於我的html標籤正在從內環路追加,每行有<html>,<head> & <body><p>標籤周圍,它只是看起來不對。我理解這個問題,並試圖重寫這些東西,以便標籤可以應用在循環之外,但我沒有取得太大的成功。

有人可以告訴我一個更好的方式來獲取當前文件的文件名,創建一個新文件+附加它,因爲我認爲這就是爲什麼當我試圖改變它如何工作時遇到文件處理錯誤。

謝謝

回答

1

這是一個縮進到正確的水平線的問題。 HTML頁腳必須在標題行的縮進級別打印,而不是在循環內縮進。試試這個:

import sys, os, glob 
import cgi 

for filename in glob.glob("./*.LOG"): 

    name = os.path.splitext(filename)[0] 
    with open(filename, 'r') as logFile, open('%s_ERROR!.html' % name, 'w') as outfile: 
     outfile.write("<html>\n<head>\n</head>\n<body><p>") 

     allLines = logFile.readlines() 
     printList = [] 

     for line in allLines: 
      if ('ERROR' in line) or ('error' in line): 
       printList.append(line) 

     for item in printList: 
      # Note: HTML-escape value of item 
      outfile.write(cgi.escape(item) + '<br>') 

     outfile.write("</p></body>\n</html>") 

請注意,您不需要使用printList - 您可以在通過日誌時發出HTML代碼。

考慮將其分解爲更小的函數以實現可重用性和可讀性。

+0

嗨謝謝你的幫助,不幸的是我還沒有到那裏。我得到一個EOL相關的錯誤,通過更正最後一行的引用來解決,但現在我在os.path行上發現錯誤,說logfile沒有定義(可以理解),然後我嘗試分割第7行並放置「在」name + os.path ...「之前打開(filename,'r')作爲logFile」,但是這反過來會在剩下的行上引發錯誤; 「open(name +'_ERROR!.html','w')as outfile:」as invalid syntax =/ – Skyone

+0

修正了錯誤(對此感到抱歉) - 請嘗試更新的答案。 – Owen

+0

非常感謝你! 現在我只需要弄清楚如何將關鍵字封裝在正確的標籤中,以便它們具有不同的顏色。 側面問題;是這樣的; 關鍵字要走的最佳路線 還是應該用css。 再次感謝。 – Skyone