因業務需求,需要提取文本中帶有檢查字樣的每一行。
樣本如下:
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