1. 程式人生 > 程式設計 >Python程式設計快速上手——正則表示式查詢功能案例分析

Python程式設計快速上手——正則表示式查詢功能案例分析

本文例項講述了Python正則表示式查詢功能。分享給大家供大家參考,具體如下:

題目如下:

  • 編寫一個程式,開啟資料夾中所有的.txt檔案,查詢匹配使用者提供的正則表示式的所有行。結果應該列印到螢幕上。

思路如下:

  • 程式需要做的事情如下:
    遍歷資料夾得到所有.txt檔名
    開啟所有.txt檔案,正則表示式進行模式匹配
    查詢結果顯示到螢幕
  • 程式碼需要做的事情如下:
    匯入re,os模組
    定義正則表示式函式
    函式內進行正則表示式匹配,並返回匹配所在行列表
    for呼叫os.listdir(path),生成.txt檔名列表
    for迴圈開啟所有.txt檔案
    使用者輸入需要查詢的字串
    for迴圈遍歷函式返回結果
    輸出結果到螢幕

程式碼如下:

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程式設計有所幫助。