2016-08-02 135 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