Python正则提取日志并写入文件的实现方法

季宁
季宁
发布时间:2026-10-11 | 2人浏览过
原创

本文介绍如何使用Python正则表达式从Apache日志文件中提取特定字段,并通过重定向sys.stdout将结果写入指定文件。通过示例代码展示了如何解析IP、时间、URL及状态码,并处理文件读写与输出恢复的逻辑。

正则过滤日志并输出到文件的实现

在处理服务器访问日志(如Apache的 access_test.log)时,通常需要提取关键信息并保存。以下示例演示了如何提取IP地址、访问时间、请求URL、状态码及流量数据,并将结果写入名为 20160205.txt 的文件中。

日志格式与提取逻辑

假设日志文件包含如下格式的数据:

27.19.74.143 - - [30/May/2015:17:38:21 +0800] "GET /static/image/smiley/default/sleepy.gif HTTP/1.1" 200 2375
8.35.201.164 - - [30/May/2015:17:38:21 +0800] "GET /static/image/common/pn.png HTTP/1.1" 200 592

我们需要从每行中提取五个部分:IP、时间、URL、状态码和流量。通过正则表达式匹配这些字段,可以构建输出字符串。

核心代码实现

以下是完整的处理脚本。代码通过 sys.stdout 重定向技术,将 print 语句的输出直接写入文件,处理完毕后恢复标准输出。

#!/usr/bin/env python  
# - coding:utf - 8 -*-
import re,sys

with open('access_test.log') as f:
  for line in f:
    parseip = re.search(r'(.*?) - - ', line)
    parsetime = re.search(r'
(.*?)
(.*?)
', line)
    parseurl = re.search(r' "\w+ (.*?) HTTP/', line)
    parsestatus = re.search(r' HTTP/(.*?)" (.*?) ', line)
    parseTraffic = re.search(r'\d+ \d+', line)

    if parseip and parsetime and parseurl and parsestatus and parseTraffic is None:
      continue
    
    output=sys.stdout
    outputfile=open('20160205.txt','a')
    sys.stdout=outputfile
    print parseip.group(1).split('?')[0] + '\t' + parsetime.group(1).split('?')[0] + '\t' + parseurl.group(1).split('?')[0] + '\t' + parsestatus.group(2) + '\t' + parseTraffic.group(0).split(' ')[1]
    outputfile.close()
    sys.stdout=output


import sys

关键步骤解析

  1. 设置输出文件:在写入前,保存当前的 sys.stdout 到变量 output,并打开目标文件(如 20160205.txt)。
  2. 重定向输出:将 sys.stdout 指向文件对象,使得后续的 print 语句内容写入文件而非控制台。
  3. 执行写入:使用 print 输出拼接好的字符串,包含提取的IP、时间、URL、状态码和流量。
  4. 恢复与关闭:写入完成后,关闭文件对象,并将 sys.stdout 恢复为原始值,确保后续程序正常运行。

若需将内容写入不同文件,可修改 open(filename, 'w') 中的 filename 参数。注意,写入模式 'w' 会覆盖原文件,而 'a' 会追加内容。

注意事项

  • 正则表达式中的 .*? 为非贪婪匹配,确保提取正确的字段。
  • 处理日志时,需确保日志格式与正则表达式匹配,否则可能提取失败。
  • 文件操作完成后,务必恢复 sys.stdout,避免影响其他输出。

以上就是Python中将正则过滤的内容输出写入到文件中的详细内容,更多关于Python日志处理与文件操作的技术资料请关注本站其它相关文章!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表