1.我有乙個名為access_log的apache的日誌檔案,為了快速能知道這個日誌檔案中有哪些ip訪問了這個apache服務並且每個ip訪問了多少次,我還想知道客戶用了哪些瀏覽器訪問該apache服務並且這個瀏覽器用的次數。
2(1)我用函式式程式設計的方法。
import re
defcount
( fname, what)
: r_d =
patt = re.
compile
(what)
with
open
(fname)
as f1:
for line in f1:
m = patt.search(line)
if m:
key = m.group(
) r_d[key]
=r_d.get(key,0)
+1return r_d
if __name__ ==
'__main__'
: fname =
'access_log'
ip =
'^(\d+\.)\d+'
br =
'firefox|msie|chrome'
a1 =
(count(fname,ip)
) a1 =
list
(a1.items())
a2 =
(count(fname,br)
) a2 =
list
(a2.items())
a1.sort(key=
lambda seq:seq[-1
],reverse=
true
) a2.sort(key=
lambda seq:seq[-1
],reverse=
true
)for i in a1:
print
('%s %s次'
% i)
for i in a2:
print
('%s %s次'
% i)
效果如下:
(2)opp物件程式設計的方法
import re
class
countpatt
:def
__init__
(self,fname)
: self.fname=fname
defcount
(self,what)
: r_d =
patt = re.
compile
(what)
with
open
(self.fname)
as f1:
for line in f1:
m = patt.search(line)
if m:
key = m.group(
) r_d[key]
=r_d.get(key,0)
+1return r_d
if __name__ ==
'__main__'
: fname =
'access_log'
ip =
'^(\d+\.)\d+'
br =
'firefox|msie|chrome'
a1 = countpatt(fname)
a1 = a1.count(ip)
a2 = countpatt(fname)
a2 = a2.count(br)
a1 =
list
(a1.items())
a2 =
list
(a2.items())
a1.sort(key=
lambda seq:seq[-1
],reverse=
true
) a2.sort(key=
lambda seq:seq[-1
],reverse=
true
)for i in a1:
print
('%s %s次'
% i)
for i in a2:
print
('%s %s次'
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訪問日誌
編寫count patt.py指令碼,實現乙個apche日誌分析指令碼 統計每個客戶端訪問apache伺服器的次數 將統計資訊通過字典的方式顯示出來 分別統計客戶端是firefox和msie的訪問次數 分別使用函式式程式設計和物件導向程式設計的方式實現 collections是python內建的乙個...