1. 程式人生 > >Python讀取文本,輸出指定中文(字符串)

Python讀取文本,輸出指定中文(字符串)

class 分享 /tmp () fun 問題 print fin 斷路器

因業務需求,需要提取文本中帶有檢查字樣的每一行。

樣本如下:

技術分享
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

Python讀取文本,輸出指定中文(字符串)