Python程式設計快速上手——正則表示式查詢功能案例分析
阿新 • • 發佈:2020-03-02
本文例項講述了Python正則表示式查詢功能。分享給大家供大家參考,具體如下:
題目如下:
- 編寫一個程式,開啟資料夾中所有的.txt檔案,查詢匹配使用者提供的正則表示式的所有行。結果應該列印到螢幕上。
思路如下:
- 程式需要做的事情如下:
遍歷資料夾得到所有.txt檔名
開啟所有.txt檔案,正則表示式進行模式匹配
查詢結果顯示到螢幕 - 程式碼需要做的事情如下:
匯入re,os模組
定義正則表示式函式
函式內進行正則表示式匹配,並返回匹配所在行列表
for呼叫os.listdir(path),生成.txt檔名列表
for迴圈開啟所有.txt檔案
使用者輸入需要查詢的字串
輸出結果到螢幕
程式碼如下:
import os,re def fileRex(inputStr,txtLines): txtRex = re.compile(r'{0}'.format(inputStr)) #正則表示式物件 blockList = [] i = 0 for t in txtLines: try: mo1 = txtRex.search(t) mo1.group() #search()方法匹配成功生成match物件,group()返回匹配到的物件,匹配成功即表示這一行為需要查詢結果,新增到列表 i += 1 #計數 blockList.append(t) except: continue #search()方法未匹配成功會報錯,程式崩潰,因此需要except加上continue,進入下一次迴圈 print("匹配到的模式個數:",i) return blockList nameList = [] #建立檔名列表 file = input("請輸入資料夾絕對路徑(如:C:\\Users\\Administrator\\Desktop\\exam):") #\\轉義字元相當於 \ for fileName in os.listdir(file): #os.listdir()方法遍歷資料夾 p = 0 if fileName.endswith('.txt'): #enswith方法,判斷字串結尾,檢查檔名字尾是不是.txt文字檔案 nameList.append(fileName) #新增到檔名列表 p += 1 else: continue print("找到的文字檔案個數: {0} !檔案有:{1}".format(p,nameList)) txtLines = [] #建立存放文字行的列表 for i in nameList: txtFile = open('{0}\\{1}'.format(file,i)) #open函式建立file物件 txtLines += txtFile.readlines() #readlines返回列表,+ 號連線返回的列表 print("文字檔案行列表:\n",txtLines) #輸出文字行列表 inputStr = input("請輸入要查詢的字串:") for k in fileRex(inputStr,txtLines): #呼叫函式,迴圈遍歷返回的列表 k = k.strip('\n') #去掉列表字串中的空格 print("含有字元 “{0}” 的文字行有:{1}".format(inputStr,k)) #輸出查詢結果
輸出結果如下:
PS:這裡再為大家提供2款非常方便的正則表示式工具供大家參考使用:
JavaScript正則表示式線上測試工具:
http://tools.jb51.net/regex/javascript
正則表示式線上生成工具:
http://tools.jb51.net/regex/create_reg
更多關於Python相關內容可檢視本站專題:《Python正則表示式用法總結》、《Python資料結構與演算法教程》、《Python函式使用技巧總結》、《Python字串操作技巧彙總》、《Python入門與進階經典教程》及《Python檔案與目錄操作技巧彙總》
希望本文所述對大家Python程式設計有所幫助。