免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 10259 | 回复: 6

python 匹配指定字符串 [复制链接]

论坛徽章:
7
卯兔
日期:2013-10-24 22:27:29天秤座
日期:2013-11-06 17:30:47午马
日期:2015-01-16 10:16:252015年亚洲杯之乌兹别克斯坦
日期:2015-04-02 14:49:302015年亚洲杯之韩国
日期:2015-04-22 14:28:03青铜圣斗士
日期:2015-11-21 00:06:2915-16赛季CBA联赛之天津
日期:2016-02-29 16:26:43
发表于 2015-05-08 09:43 |显示全部楼层
本帖最后由 noshell 于 2015-05-08 09:44 编辑

需求:
situation\s[A-D],不知道这样写正则是否表达清楚了。
在很多文本文件中,遍历。
查找文本中有situation A,situation B,situation C,situation D有这样的行,每行中只有一个situation [A-D]。有就输出这一行记录,并取时间和搜索关键字。

记录是类似这样的记录:
[04/11 20:09:30.737][udups2tux_v2_split-all15203][DDDBGG][20376][mypol.cp:ThreadRoutines:355] [udp parseeool] situation C: posId[2025807]
[udups2tux_v2_split-all15203][DDDBGG][20376][mypol.cp:ThreadRoutines:355] [udp parseeool] 和posId[2025807] 都可能有变化。但是[04/11 20:09:30.737] 和situation\s[A-D]是肯定有的。
获取时间和关键字,需要得到结果:04/11 20:09:30.737  situation C

论坛徽章:
7
卯兔
日期:2013-10-24 22:27:29天秤座
日期:2013-11-06 17:30:47午马
日期:2015-01-16 10:16:252015年亚洲杯之乌兹别克斯坦
日期:2015-04-02 14:49:302015年亚洲杯之韩国
日期:2015-04-22 14:28:03青铜圣斗士
日期:2015-11-21 00:06:2915-16赛季CBA联赛之天津
日期:2016-02-29 16:26:43
发表于 2015-05-08 09:54 |显示全部楼层
shell 一条命令搞定匹配。然后分割。很简单,新手接触python.望大神指点。

论坛徽章:
7
卯兔
日期:2013-10-24 22:27:29天秤座
日期:2013-11-06 17:30:47午马
日期:2015-01-16 10:16:252015年亚洲杯之乌兹别克斯坦
日期:2015-04-02 14:49:302015年亚洲杯之韩国
日期:2015-04-22 14:28:03青铜圣斗士
日期:2015-11-21 00:06:2915-16赛季CBA联赛之天津
日期:2016-02-29 16:26:43
发表于 2015-05-08 16:18 |显示全部楼层
本帖最后由 noshell 于 2015-05-08 16:20 编辑

搞定了上代码:欢迎拍砖。
    for line in  ifile:
        #print ('line is : %',line )
        str_new = line
        resut = str_new.find("situation"#find 查找字符串
        #print ('resut %s',resut)
        if (resut) != -1:#-1 标识为查找到,否则是查找到了。返回值是index 位置。
            t_time = line[1:19] #分割 situation
            t1 = t_time[0:5]#分:年/月
            t2 = t_time[6:]#分:十:分:秒

            t1 = '2015/'+ t1

            new_time = time.strptime(t1, "%Y/%m/%d"#转换日期格式
            Array_time = time.strftime("%Y-%m-%d", new_time)#转换日期格式
            t_time = Array_time+' '+t2
            post_start = line.index('situation')
            post_end = (post_start) + 11
            final_key = line[(post_start)post_end)]
            #print (t_time,final_key)
         
    ifile.close()
   

论坛徽章:
7
卯兔
日期:2013-10-24 22:27:29天秤座
日期:2013-11-06 17:30:47午马
日期:2015-01-16 10:16:252015年亚洲杯之乌兹别克斯坦
日期:2015-04-02 14:49:302015年亚洲杯之韩国
日期:2015-04-22 14:28:03青铜圣斗士
日期:2015-11-21 00:06:2915-16赛季CBA联赛之天津
日期:2016-02-29 16:26:43
发表于 2015-05-08 16:31 |显示全部楼层
在读文件的时候报错。
    for line in  ifile:
UnicodeDecodeError: 'gbk' codec can't decode byte 0x81 in position 962: illegal multibyte sequence

论坛徽章:
0
发表于 2015-05-08 16:36 |显示全部楼层
#!/usr/bin/env python
import re
format = re.compile(r'\[([0-9]{2}\/[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}\.[0-9]{3}).*(situation [ABCD]).*')
for line in open('lianxi.txt','r'):
        if "situation" in line:
                m = re.match(format,line).groups()
                if m:
                        print m

lianxi.txt是文本。
不知道这样是否可以,我也才学python...

论坛徽章:
7
卯兔
日期:2013-10-24 22:27:29天秤座
日期:2013-11-06 17:30:47午马
日期:2015-01-16 10:16:252015年亚洲杯之乌兹别克斯坦
日期:2015-04-02 14:49:302015年亚洲杯之韩国
日期:2015-04-22 14:28:03青铜圣斗士
日期:2015-11-21 00:06:2915-16赛季CBA联赛之天津
日期:2016-02-29 16:26:43
发表于 2015-05-08 16:50 |显示全部楼层
同是新手,多交流。谢谢哈。我跑一把。

python 板难道要靠新手撑起来么?

论坛徽章:
7
卯兔
日期:2013-10-24 22:27:29天秤座
日期:2013-11-06 17:30:47午马
日期:2015-01-16 10:16:252015年亚洲杯之乌兹别克斯坦
日期:2015-04-02 14:49:302015年亚洲杯之韩国
日期:2015-04-22 14:28:03青铜圣斗士
日期:2015-11-21 00:06:2915-16赛季CBA联赛之天津
日期:2016-02-29 16:26:43
发表于 2015-05-08 16:50 |显示全部楼层
同是新手,多交流。谢谢哈。我跑一把。

python 板难道要靠新手撑起来么?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP