zoukankan      html  css  js  c++  java
  • Python读取文本,输出指定中文(字符串)

    因业务需求,需要提取文本中带有检查字样的每一行。

    样本如下:

    1 投入10kVB、C母分段820闭锁备自投压板   
    2 退出10kVB、C母分段820备投跳803压板   
    3 退出10kVB、C母分段820备投合820压板   
    4 检查2、3号主变压器分头位置一致   
    5 合上820断路器   
    6 检查820断路器确带负荷   
    7 检查2号、3号主变压器负荷分配正常   
    8 拉开802断路器   
    9 检查802断路器在分闸位置   
    10 检查3号主变压器不过负荷   

    我们要用的包:re(python 强大的正则包),codecs(专门用作编码转换)

    思路:一种思路是直接用正则找出检查,按照样本可以这样写:\d{1,2}\s检查,属于一劳永逸的写法。还有一种就是下面比较裸的写法,先用python的readlines()方法读取文本的每一行,再用 u'检查'判断带有‘检查’的每一行,这种方法比较麻烦的地方就是还需要去掉样本中的序号,def func()就是用来解决这个问题的。至于为什么我要用第二种,我也不知道。 :)

    代码如下:

    import re
    import codecs
    
    f= codecs.open('F:/parseWord/tmp/F1040EZ.content.txt','r','utf-8')
    s = f.readlines()
    
    f.flush()
    f.close()
    for fileLine in s:
       
        if u'检查' in fileLine:
            line_pattern =r'\s*\d+\s?(.*)'
    
            def func(text):
                c = re.compile(line_pattern)
                lists = []
                lines = text.split('\n')
                for line in lines:
                    r = c.findall(line)
                    if r:
                        lists.append(r[0])
    
                return '\n'.join(lists)
                
            
            result = func(fileLine)
            print result
    
            
         

    结果:

    >>> ================================ RESTART ================================
    >>> 
    检查2、3号主变压器分头位置一致   
    
    检查820断路器确带负荷   
    
    检查2号、3号主变压器负荷分配正常   
    
    检查802断路器在分闸位置   
    
    检查3号主变压器不过负荷   
    >>> 

    当然我们还可以新建一个list,用append方法将for循环出来的结果整合到一起:

    test = []
    '''
    '''
    '''
    test.append(result)
    print test
  • 相关阅读:
    Android Studio下载gradle失败
    【宁熙】回望四月又七天
    caffe crnn windows上编译多标签分类版本
    图像识别方案的选择思考
    使用SVM进行图像识别的一些思考
    安卓usb串口免root调试
    交叉编译opencv移植到海思3518
    【2021-10-24】连岳摘抄
    【2021-10-23】人间词话
    【2021-10-22】梅兰芳
  • 原文地址:https://www.cnblogs.com/yourstars/p/5892754.html
Copyright © 2011-2022 走看看