从log或txt中分割出json格式并取出关键字对应值打印到excel 最近⽐较闲了个实习,学了⼀把python,⽤来处理⼯作中测试得到的log⽂件,特此写⼀下以上过程所学到的东西。____Xuefeng Zhang
⼀.使⽤正则表达式分割log中接⼝处的json格式数据。
1.1 正则表达式 re.findall 的简单⽤法
正则 re.findall  的简单⽤法(返回string中所有与pattern相匹配的全部字串,返回形式为数组)
语法:
1findall(pattern, string, flags=0)
import re
Python 正则表达式 re findall ⽅法能够以列表的形式返回能匹配的⼦串
# print (help(re.findall))
# print (dir(re.findall))
findall查全部r标识代表后⾯是正则的语句
1 2 3regular_v1 =re.findall(r"docs","/3/whatsnew/3.6.html") print(regular_v1)
# ['docs']
符号^表⽰匹配以https开头的的字符串返回,
1 2 3regular_v2 =re.findall(r"^https","/3/whatsnew/3.6.html") print(regular_v2)
# ['https']
⽤$符号表⽰以html结尾的字符串返回,判断是否字符串结束的字符串
1 2 3regular_v3 =re.findall(r"html$","/3/whatsnew/3.6.html") print(regular_v3)
# ['html']
# [...]匹配括号中的其中⼀个字符
1 2 3regular_v4 =re.findall(r"[t,w]h","/3/whatsnew/3.6.html") print(regular_v4)
# ['th', 'wh']
“d”是正则语法规则⽤来匹配0到9之间的数返回列表
regular_v5 =re.findall(r"\d","/3/whatsnew/3.6.html")
1 2 3 4 5 6regular_v5 =re.findall(r"\d","/3/whatsnew/3.6.html") regular_v6 =re.findall(r"\d\d\d","/3/whatsnew/3.6.html/1234") print(regular_v5)
# ['3', '3', '6']
print(regular_v6)
# ['123']
⼩d表⽰取数字0-9,⼤D表⽰不要数字,也就是出了数字以外的内容返回
1 2 3regular_v7 =re.findall(r"\D","/3/whatsnew/3.6.html")
print(regular_v7)
# ['h', 't', 't', 'p', 's', ':', '/', '/', 'd', 'o', 'c', 's', '.', 'p', 'y', 't', 'h', 'o', 'n', '.', 'o', 'r', 'g', '/', '/', 'w', 'h', 'a', 't', 's', 'n', 'e', 'w', '/', '.', '.', 'h', 't', 'm', 'l']
“w”在正则⾥⾯代表匹配从⼩写a到z,⼤写A到Z,数字0到9
1 2 3regular_v8 =re.findall(r"\w","/3/whatsnew/3.6.html")
print(regular_v8)
#['h', 't', 't', 'p', 's', 'd', 'o', 'c', 's', 'p', 'y', 't', 'h', 'o', 'n', 'o', 'r', 'g', '3', 'w', 'h', 'a', 't', 's', 'n', 'e', 'w', '3', '6', 'h', 't', 'm', 'l']
“W”在正则⾥⾯代表匹配除了字母与数字以外的特殊符号
1 2 3regular_v9 =re.findall(r"\W","/3/whatsnew/3.6.html") print(regular_v9)
python怎么读取excel的数据# [':', '/', '/', '.', '.', '/', '/', '/', '.', '.']
1.2 获得两个字符串之间⼀⼤段⽂本内容:
⽤re或者string.find.以下⽤的是re代码
import re
#⽂本所在TXT⽂件
file = ''
#关键字1,2(修改引号间的内容)
w1 = '123'
w2 = '456'
f = open(file,'r')
buff = f.read()
#清除换⾏符,请取消下⼀⾏注释
#buff = place('\n','')
pat = repile(w1+'(.*?)'+w2,re.S)
result = pat.findall(buff)
print(result)
python正则表达式中re.S的作⽤
在Python的正则表达式中,有⼀个参数为re.S。它表⽰“.”(不包含外侧双引号,下同)的作⽤扩展到整个字符串,包括“\n”。看如下代码:
a = '''asdfhellopass:
123
worldaf
'''
b = re.findall('hello(.*?)world',a)
c = re.findall('hello(.*?)world',a,re.S)
print 'b is ' , b
print 'c is ' , c
运⾏结果如下:
b is  []
c is  ['pass:\n\t123\n\t']
正则表达式中,“.”的作⽤是匹配除“\n”以外的任何字符,也就是说,它是在⼀⾏中进⾏匹配。这⾥的“⾏”是以“\n”进⾏区分的。a 字符串有每⾏的末尾有⼀个“\n”,不过它不可见。
如果只有⼀⾏字符串使⽤效果如下:
# -*- coding: cp936 -*-
import re
string = "xxxxxxxxxxxxxxxxxxxxxxxx entry '某某内容' for aaaaaaaaaaaaaaaaaa"
result = re.findall(".*entry(.*)for.*",string)
for x in result:
print x
输出:
# '某某内容'
如果不使⽤re.S参数,则只在每⼀⾏内进⾏匹配,如果⼀⾏没有,就换下⼀⾏重新开始,不会跨⾏。⽽使⽤re.S参数以后,正则表达式会将这个字符串作为⼀个整体,将“\n”当做⼀个普通的字符加⼊到这个字符串中,在整体中进⾏匹配。
⼆.使⽤python解析Json字符串-获取Json字符串关键字
看代码
data = {
"statusCode": 200,
"data": {
"totoal": "5",
"height": "5.97",
"weight": "10.30",
"age": "11"
},
"msg": "成功"
}
#dumps:把字典转换为json字符串
s = json.dumps(data)
print s
#loads:把json转换为dict
s1 = json.loads(s)
print s1
#打印statusCode对应的值
print s1["statusCode"]
#打印data下age对应的值
print s1["data"]["age"]
三.使⽤python对Excel进⾏读写操作
我们可以使⽤xlwt module将数据写⼊Excel表格,使⽤xlrd module从Excel读取数据。更好的建议有pymysql数据库以及CSV格式,⼯作需要⽤前⾯的。
3.1 python安装xlrd-1.10和xlwt-1.3.0
cmd到xlrd的路径,然后写setup.py install 安装
xlwt的安装同上
这样就安装完成了。
然后验证,打开Python 命令⾏,不报错,表明你安装成功了,恭喜你可以继续学习了。
3.2 对Excel进⾏读写操作
3.2.1 对Excel的写操作:
# -*- coding: utf-8 -*-
#导⼊xlwt模块
import xlwt
# 创建⼀个Workbook对象,这就相当于创建了⼀个Excel⽂件
book = xlwt.Workbook(encoding='utf-8', style_compression=0)
'''
Workbook类初始化时有encoding和style_compression参数
encoding:设置字符编码,⼀般要这样设置:w = Workbook(encoding='utf-8'),就可以在excel中输出中⽂了。
默认是ascii。当然要记得在⽂件头部添加:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
style_compression:表⽰是否压缩,不常⽤。
'''
#创建⼀个sheet对象,⼀个sheet对象对应Excel⽂件中的⼀张表格。
# 在电脑桌⾯右键新建⼀个Excel⽂件,其中就包含sheet1,sheet2,sheet3三张表
sheet = book.add_sheet('test', cell_overwrite_ok=True)
# 其中的test是这张表的名字,cell_overwrite_ok,表⽰是否可以覆盖单元格,其实是Worksheet实例化的⼀个参数,默认值是False # 向表test中添加数据
sheet.write(0, 0, 'EnglishName')  # 其中的'0-⾏, 0-列'指定表中的单元,'EnglishName'是向该单元写⼊的内容
sheet.write(1, 0, 'Marcovaldo')
txt1 = '中⽂名字'
sheet.write(0, 1, txt1.decode('utf-8'))  # 此处需要将中⽂字符串解码成unicode码,否则会报错
txt2 = '马可⽡多'
sheet.write(1, 1, txt2.decode('utf-8'))
# 最后,将以上操作保存到指定的Excel⽂件中
book.save(r'e:\test1.xls')  # 在字符串前加r,声明为raw字符串,这样就不会处理其中的转义了。否则,可能会报错
3.2.2 对Excel的写操作
表格如图

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。