使用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
投稿
猜你喜欢
- 本文讨论 MySQL 的备份和恢复机制,以及如何维护数据表,包括最主要的两种表类型:MyISAM 和 Innodb,文中设计的 MySQL
- 在本章中,我们将详细讨论对称和非对称密码术.对称密码术在此类型中,加密和解密进程使用相同的密钥.它也被称为秘密密钥加密.对称加密的主要特征如
- 本文实例分析了Python减少循环层次和缩进的技巧。分享给大家供大家参考,具体如下:我们知道Python中冒号和缩进代表大括号,这样写已经可
- 一、手指触屏,利用touchstart和touchend计算前后滑动距离,判断是上拉还是下滑。二、js中距离:pageY、clientY、o
- 1,CSS,JS,IMG一个都不能少运行代码框<style type="text/css">&l
- 第一步 : 从清华大学开源软件镜像站下载Anaconda:https://mirrors.tuna.tsinghua.edu.cn/anac
- 1. 用户输入内容与打印输入:input()输出:print()例1,输入字符串,并原样输出a = input('请输入一些字符
- 阅读上一篇:[译]Javascript风格要素(一) 我们使用习惯用法可以使我们的意图更加的清晰和简洁。使用==时,当心强制转换考虑下面函数
- 本文实例讲述了Python将名称映射到序列元素中的方法。分享给大家供大家参考,具体如下:问题:希望通过名称来访问元素,减少结构中对位置的依赖
- 注释用于说明代码实现的功能、采用的算法、代码的编写者以及创建和修改的时间等信息。注释是代码的一部分,注释起到了对代码补充说明的作用。Pyth
- 前言初学者看到 Python 中的下划线 _ 时可能会有些懵圈,不知道这个到底是干什么用的,今天就来盘点一下 Python 中间的下划线有哪
- 本文实例为大家分享了Python实现双人五子棋对局的具体代码,供大家参考,具体内容如下效果:自己需要两个棋子:服务器玩家全部代码:# 案列使
- 这个是用python实现的基本的增删改查的学生管理系统吧,其中主要是对输入的数据进行合法性检测的问题,这次又对函数进行了练习!掌握函数更加熟
- 一、前言python在数组中随机取值有现成的方法,但是要给每个随机值被取到的概率加权重的话,可以参考下面这个方法二、实现方式import r
- Python中核心的数据类型有哪些?变量(数字、字符串、元组、列表、字典)什么是数据的不可变性?哪些数据类型具有不可变性数据的不可变是指数据
- 话不多说,直接上代码import copyimport cv2import numpy as npWIN_NAME = 'draw_
- 作者: Terrance译者:Sheneyan(子乌)时间:2010.2.6英文原文:13 Useful WordPress SQL Que
- Python中的布尔类型Python中的布尔类型(bool)只有两个取值,分别是True和False。bool类型通常用于逻辑判断和条件控制
- 本文实例讲述了Python使用chardet判断字符编码的方法。分享给大家供大家参考。具体分析如下:Python中chardet 用来实现字
- 有的时候需要用python处理二进制数据,比如,存取文件,socket操作时.这时候,可以使用python的struct模块来完成.可以用