使用Python编写提取日志中的中文的脚本的方法


Posted in Python onApril 30, 2015

由于工作需要在一大堆日志里面提取相应的一些固定字符,如果单纯靠手工取提取,数据量大,劳心劳力,于是自然而然想到了用Python做一个对应的提取工具,代替手工提取的繁杂,涉及中文字符,正则表达式不好匹配,但不是不可以实现,这个以后优化时再说。

需求描述:

一个父目录中存在多个子文件夹,子文件夹下有多个txt形式化的Log日志,要求从所有地方Log日志中找出CardType=9, CardNo=0时的CardID的值,并将其统计存储到一个文本文件中,要求CardID不能够重复。

需求解析:

首先获取所有的Log日志的全路径,根据路径分别加载到将各个Log日志加载到内存中进行提取分析,并将结果存储到给定的文本文件中。

解决方案:

为了尽可能的简洁通用,这里使用配置文件作为输入变量的依据。不多说,上代码:

配置文件如下:

使用Python编写提取日志中的中文的脚本的方法

103文件夹下有两个文件:log1.txt和log2.txt, 内容类似如下:

使用Python编写提取日志中的中文的脚本的方法使用Python编写提取日志中的中文的脚本的方法

Python代码实现如下:

# -*- coding: utf-8 -*-
#!/usr/bin/python
# filename: picktools.py
# codedtime:2015-3-25

import os
import configparser

# 遍历一个目录,输出所有文件名
def itemsbrowse(path):
  for home, dirs, files in os.walk(path):
    for filename in files:
      yield os.path.join(home, filename)

# 给的文件中查找对应的字符串所在行      
def findchars(filename, chars):
  file = open(filename, 'r')
  for eachline in file:
    if eachline.find(chars) >= 0:
      yield eachline
  file.close()

# 添加到指定的文件
def addtofile(filename, mygenerator):
  file = open(filename, 'a')   # 追加方式打开
  for line in mygenerator:
    file.write(line)
  file.close()

# 过滤重复的字符行
def filter(filename):
  mylist = []
  file = open(filename, 'r')
  for eachline in file:
    mylist.append(eachline.strip())
  file.close()
  
  file2 = open(os.path.splitext(filename)[0] + '_filter.txt', 'w')
  for line in list(set(mylist)):
    print(line, file = file2)
    #file2.write(line) 
  file2.close()
  

def excute():
  iniconf = configparser.ConfigParser()
  iniconf.read('config.ini')
  ifile = iniconf.get('setting', 'ifilepath')
  ofile = iniconf.get('setting', 'ofilepath')
  chars = iniconf.get('setting', 'searchstr')
  
  for fullname in itemsbrowse(ifile):
    mygenerator = findchars(fullname, chars)
    addtofile(ofile, mygenerator)
    
  filter(ofile)
      
      
if __name__ == '__main__':
  excute()

输出结果:输出两个文件result.txt 和result_filter.txt

使用Python编写提取日志中的中文的脚本的方法使用Python编写提取日志中的中文的脚本的方法

心得体会:

1、利用Python去处理一些日常的小任务,可以很方便的完成,相比较C/C++来说,这方面生产力高了不少。

2、本文设计对中文字符的处理,所以使用正则表达式不太怎么方便,但不少不可以,后续版本中会添加对正则的支持!

3、由于初学中,所以代码写的不够精炼简洁,后续进行再优化!

Python 相关文章推荐
Python的Bottle框架中实现最基本的get和post的方法的教程
Apr 30 Python
Python中利用Scipy包的SIFT方法进行图片识别的实例教程
Jun 03 Python
Python 忽略warning的输出方法
Oct 18 Python
用python代码将tiff图片存储到jpg的方法
Dec 04 Python
详解pandas安装若干异常及解决方案总结
Jan 10 Python
python石头剪刀布小游戏(三局两胜制)
Jan 20 Python
Flask模板引擎之Jinja2语法介绍
Jun 26 Python
详解使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件
Aug 23 Python
浅谈python的elementtree模块处理中文注意事项
Mar 06 Python
python 进制转换 int、bin、oct、hex的原理
Jan 13 Python
浅谈Python类的单继承相关知识
May 12 Python
Python 第三方库 openpyxl 的安装过程
Dec 24 Python
简单的连接MySQL与Python的Bottle框架的方法
Apr 30 #Python
Python的Bottle框架中实现最基本的get和post的方法的教程
Apr 30 #Python
Python中使用Beautiful Soup库的超详细教程
Apr 30 #Python
Python中正则表达式的详细教程
Apr 30 #Python
详解在Python程序中使用Cookie的教程
Apr 30 #Python
处理Python中的URLError异常的方法
Apr 30 #Python
介绍Python的Urllib库的一些高级用法
Apr 30 #Python
You might like
header()函数使用说明
2006/11/23 PHP
php检测用户是否用手机(Mobile)访问网站的类
2014/01/09 PHP
PHP程序漏洞产生的原因分析与防范方法说明
2014/03/06 PHP
PHP实现将MySQL重复ID二维数组重组为三维数组的方法
2016/08/01 PHP
YII框架批量插入数据的方法
2017/03/18 PHP
php如何计算两坐标点之间的距离
2018/12/29 PHP
PHP attributes()函数讲解
2019/02/03 PHP
php实现将数组或对象写入到文件的方法小结【三种方法】
2020/04/22 PHP
Javascript 篱式条件判断
2008/08/22 Javascript
jQuery学习笔记(3)--用jquery(插件)实现多选项卡功能
2013/04/08 Javascript
jQuery中:eq()选择器用法实例
2014/12/29 Javascript
jQuery根据ID、CLASS、等获取对象的实例
2016/12/04 Javascript
JS轮播图中缓动函数的封装
2020/11/25 Javascript
解决vuejs项目里css引用背景图片不能显示的问题
2018/09/13 Javascript
又拍云 Node.js 实现文件上传、删除功能
2018/10/28 Javascript
js实现转动骰子模型
2019/10/24 Javascript
VUEX-action可以修改state吗
2019/11/19 Javascript
深入理解redux之compose的具体应用
2020/01/12 Javascript
python去掉字符串中重复字符的方法
2014/02/27 Python
动感网页相册 python编写简单文件夹内图片浏览工具
2016/08/17 Python
浅谈django中的认证与登录
2016/10/31 Python
通过PYTHON来实现图像分割详解
2019/06/26 Python
浅谈Python3实现两个矩形的交并比(IoU)
2020/01/18 Python
Python Django路径配置实现过程解析
2020/11/05 Python
美国购买新书和二手书网站:Better World Books
2018/10/31 全球购物
在使用非全零作为空指针内部表达的机器上, NULL是如何定义
2014/11/09 面试题
优秀教师工作感言
2014/02/16 职场文书
就业推荐表自我鉴定范文
2014/03/21 职场文书
婚前协议书
2014/04/15 职场文书
高等教育学专业自荐书
2014/06/17 职场文书
说好普通话圆梦你我他演讲稿
2014/09/21 职场文书
群众路线个人自我剖析材料
2014/10/07 职场文书
财务助理岗位职责范本
2014/10/09 职场文书
2014年图书室工作总结
2014/12/09 职场文书
为什么不建议在go项目中使用init()
2021/04/12 Golang
如何用threejs实现实时多边形折射
2021/05/07 Javascript