使用Python编写提取日志中的中文的脚本的方法
作者:JohnnyHu90 发布时间:2023-12-14 16:04:44
标签:Python
由于工作需要在一大堆日志里面提取相应的一些固定字符,如果单纯靠手工取提取,数据量大,劳心劳力,于是自然而然想到了用Python做一个对应的提取工具,代替手工提取的繁杂,涉及中文字符,正则表达式不好匹配,但不是不可以实现,这个以后优化时再说。
需求描述:
一个父目录中存在多个子文件夹,子文件夹下有多个txt形式化的Log日志,要求从所有地方Log日志中找出CardType=9, CardNo=0时的CardID的值,并将其统计存储到一个文本文件中,要求CardID不能够重复。
需求解析:
首先获取所有的Log日志的全路径,根据路径分别加载到将各个Log日志加载到内存中进行提取分析,并将结果存储到给定的文本文件中。
解决方案:
为了尽可能的简洁通用,这里使用配置文件作为输入变量的依据。不多说,上代码:
配置文件如下:
103文件夹下有两个文件:log1.txt和log2.txt, 内容类似如下:
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
心得体会:
1、利用Python去处理一些日常的小任务,可以很方便的完成,相比较C/C++来说,这方面生产力高了不少。
2、本文设计对中文字符的处理,所以使用正则表达式不太怎么方便,但不少不可以,后续版本中会添加对正则的支持!
3、由于初学中,所以代码写的不够精炼简洁,后续进行再优化!
0
投稿
猜你喜欢
- 一、基础理论1、TensorFlowtensor:张量(数据)flow:流动Tensor-Flow:数据流2、TensorFlow过程Ten
- 我就废话不多说了,直接上代码吧!#coding=utf-8'''openCV中最核心的的类是Mat,他是matrix
- 昨晚在往MySQL数据库中插入一组数据时,出错了!数据库无情了给我报了个错误:ERROR 1365(22012):Division by 0
- 最近开发一套接口,写个Python脚本,使用requests.session模拟一下登录.因为每次需要获取用户信息,登录需要带着sessio
- 文本:每行在promotion后面包含一些数字,如果这些数字是相同的,则认为是相同的行,对于相同的行,只保留一行。思路:根据字典和字符串切割
- 问题如下当我使用Matplotlib绘制图形时,经常会遇到一些比例太小导致 百分比标签 以及 文本标签 重叠问题。这样的话非常影响美观,效果
- 本文实例讲述了Python实现爬取逐浪小说的方法。分享给大家供大家参考。具体分析如下:本人喜欢在网上看小说,一直使用的是小说下载阅读器,可以
- SQL Server PRIMARY KEY(主键)约束简介主键是唯一标识表中每一行的一列或一组列。您可以使用主键约束为表创建主键。如果主键
- 目录什么是websocket?第一步 准备工作第二步 编写聊天室页面第三步 编写后台websocket路由及处理方法第四步 运行看效果小结C
- ASP里两种常用的生成文件的方式是:利用ADODB.Stream生成文件和利用Scripting.FileSystemObject生成文件1
- 一:购物车管理功能1.添加商品(不重复添加)、2.删除商品(购物车中有的才能删除)、3.查看购物车4.退出系统产品列表products =
- 在项目中遇到一情况让困扰了半天,同一张PNG8图片为何部份图标在IE6中消失呢?当时一度怀疑是cache或hosts问题反反复复开关浏览器结
- 要真说出来哪一个函数能够做得到,还真难。但我们可用下面的代码来进行识别,返回“假”即偶数,返回“真”则奇数: function&n
- (一)问题遗传算法求解正方形拼图游戏(二)代码#!/usr/bin/env python# -*- coding: utf-8 -*-fro
- 本文实例讲述了JavaScript点击按钮后弹出透明浮动层的方法。分享给大家供大家参考。具体分析如下:这里实现点击后页面变灰色,并用JS弹出
- 本文实例为大家分享了python傅里叶变换FFT绘制频谱图的具体代码,供大家参考,具体内容如下频谱图的横轴表示的是 频率, 纵轴表
- 服务端渲染及session鉴权服务端渲染服务端渲染简单来说就是前端页面是由服务器通过字符串拼接动态生成的,客户端不需要额外通过Ajax请求参
- 如题,我有一个模板,我想根据需求复制模板中间的某一页多次,比如复制第五页,然后复制3次,那么第六页,第七页,第八页都是和第五页一模一样的pp
- 目录1.简介2.如何解决3.虚线框类代码4.测试UI界面如下图所示5.拖动时的效果图如下所示1.简介看到很多才学QT的人都会问为啥无边框拖动
- 1 数据离散化1.1 为什么要离散化连续属性离散化的目的是为了简化数据结构,数据离散化技术可以用来减少给定连续属性值的个数。离散化方法经常作