2017-06-20 46 views
0

嘿,我写了一个应该搜索.log文件并找到关键字“Complete Respons”的程序。所有找到的关键字应稍后写入并保存在一个新的.txt文件中。现在我已经管理程序来搜索一个文档,但是我在同一个目录中有相同类型的+50个文档,我想同时搜索所有文档,并将所有找到的关键字放在同一个.txt文档中。我真的可以用一些帮助...! 感谢python - 关键字搜索程序

def read_log_file(filename, keyword): #file 

    saved_word = [] # Array 
# read file 
    with open(filename) as file_search: #open search file 
     file_search = file_search.readlines() #read file 
    for lines in file_search: # every word is scaned 
      if keyword in lines: # extract the keyword 
       saved_word.append(lines) #store all found keywords in array 
     # write in new file 
    with open('CompleteResponse.txt', 'w') as file_handler: 
     file_handler.write(f"{filename}\n") 
     for i in range(len(saved_word)): 
      file_handler.write(f"{saved_word[i]}") 

    print('done') # completed 

    print(len(saved_word)) # count found words 

read_log_file(r'C:\Users\\Documents\read_log_files\test.log', 'Complete Response:') 
+0

请详细说明了一个问题:你有没有问题?异常? – pinturic

+1

@fili:@Shai给出的答案会让你在那里。只是对你的代码的一些评论:'为file_search'中的行 - 为什么复数?在'file_search'中执行'for line',也不要养成'file_search = file_search.readlines()'的习惯,因为这会改变'file_search'的类型,并且会导致微妙的错误。最后,'file_search'和'file_handler'是奇怪的名字。并且随着日志文件变大,您可能希望避免将它们全部读入数组,然后逐行处理。 –

回答

3

打开输出文件'CompleteResponse.txt'追加模式,而不是

with open('CompleteResponse.txt', 'a') as file_handler: 

然后调用你的函数在一个循环:

import glob 
for filename in glob.glob('C:\Users\\Documents\read_log_files\*.log'): 
    read_log_file(filename, 'Complete Response:') 

应该做的你的诀窍。

您可以找到详细的文件打开模式列表here


PS,
如果您打算调用这个函数多次,输出文件'CompleteResponse.txt'将包含所有结果(所有输出的串联,从所有运行)。
为了避免这种情况,你可能会想“复位”前档处理所有日志文件:

with open('CompleteResponse.txt', 'w') as file_handler: 
    pass # open with 'w' to "reset" the file. 
+0

在脚本末尾删除文件? – cdarke

+0

@cdarke - 我guss“重置”文件**之前**是更合适的.. – Shai

+1

@Shai非常感谢你,它确实工作,我想要它! – fili