您的位置:首页 > 编程语言 > Python开发

python---实战日志文件中查找特定字段,文件操作读写、排序、替换、列表、集合

2017-09-20 22:53 856 查看
python—实战日志文件中查找特定字段,文件操作读写、排序、替换、列表、集合

在服务器上新建以下文件:

root@kali:~/python/laowangpy# ls
idsearch.py   logid.txt    id.txt        memid.txt      result.txt
root@kali:~/python/laowangpy#

root@kali:~/python/laowangpy# ls -la
总用量 444
drwxr-xr-x  2 root root   4096  9月 20 22:20 .
drwxr-xr-x 16 root root   4096  9月  3 09:27 ..
-rw-r--r--  1 root root   2283  9月 20 21:19 idsearch.py
-rw-r--r--  1 root root 305046  9月 20 21:19 id.txt
-rw-r--r--  1 root root   8991  9月 20 21:18 logid.txt
-rw-r--r--  1 root root   1090  9月 20 21:18 memid.txt
-rw-r--r--  1 root root  18929  9月 20 22:21 result.txt
root@kali:~/python/laowangpy#


原始日志文件(使用*号对敏感数据进行打码处理)

root@kali:~/python/laowangpy# more id.txt
122.155.130.** > 172.16.162.**:80 - - [20/Sep/2017:03:51:39 +0800] merchants.*****.com "POST /api/login HTTP/1.0" 200 72 "https://merchants.*****.com/" 200 172.16.162.**:9090 0.039 0.026 "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safar
i/537.36 SE 2.X MetaSr 1.0" "122.155.130.**, 47.89.13.250" "{\x22merchantId\x22:\x222001****23\x22,\x22userId\x22:\x22admin***\x22,\x22passWord\x
22:\x2236e1b00693b5e06440aeafca80*****\x22,\x22loginType\x22:\x221\x22}"
..............
..............
.............
--More--(1%)
122.155.130.** > 172.16.162.**:80 - - [20/Sep/2017:14:08:26 +0800] merchants.*****.com "POST /api/login HTTP/1.0" 200 564 "https://merchants.*****.com/" 200 172.16.162.14:9090 0.563 0.403 "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0" "122.155.130.**, 47.88.50.**" "{\x22passWord\x22:\x221c477b2365d1566c555766f0d1d*****\x22,\x22userId\x22:\x22admin***\x22,\x22merchantId\x22:\x222001****25\x22,\x22loginType\x22:\x221\x22}"
122.155.130.** > 172.16.162.**:80 - - [20/Sep/2017:14:24:36 +0800] merchants.*****.com "POST /api/login HTTP/1.0" 200 564 "https://merchants.*****.com/" 200 172.16.162.**:9090 0.512 0.306 "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0" "122.155.130.**, 47.88.50.50" "{\x22merchantId\x22:\x222001****25\x22,\x22userId\x22:\x22admin***\x22,\x22passWord\x22:\x22b84d6d159aa9606ccbfd181456*****\x22,\x22loginType\x22:\x221\x22}"
root@kali:~/python/laowangpy#


需要分析的账户ID值(使用*号对敏感数据进行打码处理):

root@kali:~/python/laowangpy# cat memid.txt
2001****01
2001****02
..........
..........
..........
2001****96
2001****97
2001****98
2001****99

root@kali:~/python/laowangpy#


需要分析的登录ID值(使用*号对敏感数据进行打码处理):

root@kali:~/python/laowangpy# more logid.txt
admin**1
admin**2
admin**3
........
........
........
admin**8
admin**9
--More--(4%)


执行的脚本文件:

root@kali:~/python/laowangpy# cat idsearch.py
#!/usr/bin/python
# --*-- coding:utf-8 --*--

#把存放结果的result.txt文本内容清空,每次运行脚本,都先清空,在写入内容
f4 = open('result.txt','w')
f4.write('')#清空文件内容
f4.close()

# 读取原始的日志文件
m = open('id.txt').read()#全部读取日志文件
m = m.replace("\\",'%')#对\\字符使用%替换
#print m
n = m.replace('%x22',' ')#对%x22字符使用空格替换
#print n
l = n.split(' ')#对出现的空格进行字符串分割,此步骤很关键!!
print '----------------------------------------------------------------------------------'
#print l

#读取登录的账号ID值
f1 = open('memid.txt').read()#全部读取内容
r = f1.replace('\n','%')#对账户ID中换行符号使用%替换
s = r.split('%')#对账户ID进行%分割
#print s#把账户ID值转成列表
t = [(x,l.count(x)) for x in s]#在整理成新日志的列表l中,对列表s遍历查找账户ID值,如果存在,则统计次数,此处参考http://blog.csdn.net/xwbk12/article/details/78014509 的第2答题
#print t
v =sorted(t)#对列表t转换成集合v
#print v
print '===========账户ID值,及统计次数===================='
u = sorted(t,key=lambda x:x[1],reverse=True)#对集合v中使用第二个key值大小,并从大到小排序
print u

#列表不能直接写入文件,只能转换成字符串,才可以写入文件中
#对读取日志匹配到的账户id值,使用追加方式写入result.txt文件中
str1 = str(u)#转换字符串才可以写入文件
f3 = open('result.txt','a+')#
f3.write('\n')
f3.write(str1)#对转换的字符串进行写入文本中
f3.write('\n')
f3.close()

#读取登录ID值
f2=open('logid.txt').read()#全部读出登录ID值
a = f2.replace('\n','%')#对登录ID中换行符使用%替换
b = a.split('%')#对登录ID进行%分割
c = [(x,l.count(x)) for x in b]#在整理成日志的列表l中,对列表b遍历查找登录ID值,如果存在,则统计次数,此处参考http://blog.csdn.net/xwbk12/article/details/78014509 的第2答题
d = sorted(c)#对列表t转换成集合d
e = sorted(c,key=lambda x:x[1],reverse=True)#对集合b中使用第二个key值大小,并从大到小排序
print '------------登录ID值adminxxx,及统计次数--------------'
print e

#列表不能直接写入文件,只能转换成字符串,才可以写入文件中
#对读取日志匹配到的登录id值,使用追加方式写入result.txt文件中
str2 =str(e)#转换字符串才可以写入文件
f3 = open('result.txt','a+')
f3.write('\n')
f3.write(str2)#转换字符串才可以写入文件
f3.write('\n')
f3.close()
root@kali:~/python/laowangpy#


保存结果的文件信息:

root@kali:~/python/laowangpy# more result.txt

[('2001****12', 60), ('2001****34', 54), ('2001****26', 34), ('2001****21', 32), ('2001****32', 28), ('2001****02', 24), ('2001****33', 24), ('20
01****22', 22), ('2001****23', 22), ('2001****07', 18), ('2001****24', 18), ('2001****28', 18), ('2001****31', 16), ('2001****13', 14), ('2001****29', 14), ('2001****20', 12), ('2001****25', 12), ('2001****08', 8), ('2001****18', 8), ('2001****19', 8), ('2001****06', 6), ('2001****01', 0),...........]

[('admin361', 54), ('admin025', 32), ('admin720', 32), ('admin367', 28), ('admin005', 24), ('admin936', 24), ('admin943', 24), ('admin964', 22),
('admin847', 20), ('admin412', 18), ('admin602', 18), ('admin610', 18), ('admin165', 16), ('admin119', 14), ('admin968', 14), ('admin263', 12), (
'admin407', 12), ('admin030', 8), ('admin167', 8), ('admin223', 8), ('admin705', 6), ('admin001', 0),......]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐