編寫count_patt.py指令碼,實現乙個apche日誌分析指令碼:
統計每個客戶端訪問apache伺服器的次數
將統計資訊通過字典的方式顯示出來
分別統計客戶端是firefox和msie的訪問次數
分別使用函式式程式設計和物件導向程式設計的方式實現
collections是python內建的乙個集合模組,模組中提供了許多有用的集合類,其中counter類 是乙個簡單的計數器,以字典的鍵值對形式儲存,其中搜尋的元素作為鍵,出現的次數作為值
實現過程:
1.例項化乙個計數器
2.例項化正規表示式
3.將檔案以物件形式開啟
4.通過正規表示式查詢檔案每一行
5.如果找到結果
6.將結果新增到計數器,通過update方法更新原有資料
7.返回計數器
8.將檔案位址和正規表示式作為實參傳遞給函式
實現此案例需要按照如下步驟進行。
[root@localhost day08]# vim count_patt.py
#!/usr/bin/env python3
import re
import collections
#fname 檔案位址 patt 正規表示式
def count_patt(fname,patt):
counter = collections.counter()
cpatt = re.compile(patt)
with open(fname) as fobj:
for line in fobj:
m = cpatt.search(line)
if m:
counter.update([m.group()])
return counter
if __name__ == "__main__":
fname = "access_log.txt"
ip_patt = "^(\d+\.)\d+"
a = count_patt(fname,ip_patt)
print(a)
br_patt = "firefox|msie|chrome"
b = count_patt(fname,br_patt)
print(b)
實現此案例還可通過物件導向方式實現:
1.建立類countpatt
2.定義構造方法 建立正則物件
3.定義類方法
4.建立計數器物件
5.開啟文字檔案
6.通過正規表示式查詢檔案每一行
7.如果找到結果
8.將結果新增到計數器,通過update方法更新原有資料
9.返回計數器
10.將檔案位址和正規表示式作為實參傳遞給函式
[root@localhost day08]# vim count_patt2.py
#!/usr/bin/env python3
import re
import collections
import re
import collections
class countpatt:
def __init__(self,patt):
self.cpatt = re.compile(patt)
def count_patt(self,fname):
counter = collections.counter()
with open(fname) as fobj:
for line in fobj:
m = self.cpatt.search(line)
if m:
counter.update([m.group()])
return counter
if __name__ == "__main__":
fname = "access_log.txt"
ip_patt = "^(\d+\.)\d+"
br_patt = "firefox|msie|chrome"
ip = countpatt(ip_patt)
print(ip.count_patt(fname))
br = countpatt(br_patt)
print(br.count_patt(fname))
[root@localhost root]# python3 count_patt.py
counter()
counter()
[root@localhost day08]# python3 count_patt2.py
counter()
counter()
Repo指令碼分析
repo指令碼是作為整個repo工具的入口,只要負責repo環境的初始化和轉殖repo庫。repo有兩處if name main 位於開始部分主要是給shell執行用的,位於末尾的部分是給python執行用的。來看看repo引導指令碼的前幾行。1 bin sh 2 3 repo url git 4 ...
鏈結指令碼分析
鏈結三要素 鏈結順序,鏈結位址,載入位址 1.連線順序的問題 倘若有鏈結指令碼,則會按照鏈結指令碼的規則進行鏈結。例如 sections second x30000000 at 4096 這個規則中定義了兩個大段,first和second。first的鏈結順序為head.o init.o nand....
用python指令碼分析apache訪問日誌
1.我有乙個名為access log的apache的日誌檔案,為了快速能知道這個日誌檔案中有哪些ip訪問了這個apache服務並且每個ip訪問了多少次,我還想知道客戶用了哪些瀏覽器訪問該apache服務並且這個瀏覽器用的次數。2 1 我用函式式程式設計的方法。import re defcount f...