小杜今天需要從run.log中提取一些關(guān)鍵信息,又一次使用到了python的re.findall和re.match,也有了一點新的收獲。隨意寫一點,當(dāng)作記錄。
我的具體使用場景是需要從數(shù)千行的run.log文件中提取出大括號 { } 中包住的數(shù)據(jù),數(shù)據(jù)有很多個,但格式都很固定,為 ‘hx 或 ‘hxx 的形式,每個數(shù)據(jù)由一個逗號和空格隔開,即:
{'hx, 'hx, 'hxx, 'hx, 'hxx, 'hxx, ...}
但大括號中的數(shù)據(jù)又只有部分固定位是我所需要的。
作為python腳本初學(xué)者,我目前的解決方法是先把大括號和其中的數(shù)據(jù)提取出來,再使用正則表達式的group將所需的固定位數(shù)據(jù)提取出來。
-
re.findall - 在字符串中找到正則表達式所匹配的所有子串,并返回一個列表,如果有多個匹配模式,則返回元組列表,如果沒有找到匹配的,則返回空列表。
-
re.match - 嘗試從字符串的起始位置匹配,如果模式在字符串中間,則不會匹配成功,match( ) 返回None。
這樣做的是因為這段數(shù)據(jù)并不在行首,且數(shù)據(jù)前面有一長串的打印信息,并不方便直接使用re.match,因此先使用re.findall將所有符合該pattern的數(shù)據(jù)提取出來,再使用re.match配合group提取固定位信息就方便許多(正則好寫很多)。下面是我的兩段python腳本:
import osimport reimport stringfile_input = 'path/run.log'file_output = 'path/xxx1.dat'fi = open(file_input, 'r')fo = open(file_output, 'w')pattern = '...' #匹配大括號和數(shù)據(jù)的正則表達式for line in f1.readlines():data = re.findall(pattern, line)fo.write(data)fo.write(' ')fi.close()fo.close()
import osimport reimport stringfile_input = 'path/xxx1.dat'file_output = 'path/xxx2.dat'fi = open(file_input, 'r')fo = open(file_output, 'w')pattern = '...' #帶有( )的正則表達式,匹配固定位數(shù)據(jù)for line in f1.readlines():data1 = re.match(pattern, line).group(1)data2 = re.match(pattern, line).group(3)data3 = re.match(pattern, line).group(5)fo.write(data1)fo.write(data2)fo.write(data3)fo.write(' ')fi.close()fo.close()
這樣通過連續(xù)運行2次python腳本,再合理使用write( ),就可以提取出我需要的固定位數(shù)據(jù),并且以我需要的格式寫入到輸出的目標(biāo)文件中。
作為新手,寫的很簡易。能不能把這兩個步驟集成到一個python腳本中?有沒有更便捷的實現(xiàn)方法?還需要繼續(xù)學(xué)習(xí)、思考。
審核編輯:湯梓紅
-
python
+關(guān)注
關(guān)注
57文章
4857瀏覽量
89586 -
腳本
+關(guān)注
關(guān)注
1文章
407瀏覽量
29051
原文標(biāo)題:日常 - re.findall 和 re.match 的簡單使用
文章出處:【微信號:小杜的芯片驗證日記,微信公眾號:小杜的芯片驗證日記】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
python實現(xiàn)網(wǎng)頁爬蟲爬取圖片
Python面試必看的10個問題
利用Python實現(xiàn)簡單圖片下載功能
初識 Python 正則表達式
python正則表達式字符集
python正則表達式數(shù)量詞
python正則表達式中的常用函數(shù)
python中urllib3和requests的使用
RE46C114 RE46C114是一種電離煙霧探測器AFE
RE46C112 RE46C112是一種電離煙霧探測器AFE
帖子主題:Re:Колибрипрограммированияпрограммирования

python中re.findall和re.match的使用
評論