這幾天有這樣一個需求,要將使用者登陸系統的資訊統計出來,做成一個報表。當使用者登陸成功的時候,伺服器會往日誌檔案裡寫一條像下面這種格式的記錄:”日期時間@使用者名稱@IP“,這樣的日誌檔案第天生成一個。所以,我們只要編歷這些日誌檔案,將所有的登陸資訊提取出來,並重新組織資料格式就可以了。用python寫一個分析工具非常簡單,你會說,用glob獲取所有的日誌檔案,然後對每個日誌檔案都open(logfile),再一行一行的讀取;或者用os.walk,也很簡單。其實,標準庫提供了另一個輔助模組,我們可以非常方便的完成這個工作,那就是fileinput。下面我們就通過fileinput來編歷所有的D盤下的文字檔案,將每一行的長度列印出來:
1 2 3 4 5 6 7 |
import fileinput from glob import glob for line in fileinput.input(glob(r'd:/*.txt')): print fileinput.lineno(), u'檔案:', fileinput.filename(), / u'行號:', fileinput.filelineno(), u'長度:', len(line.strip('/n')) fileinput.close() |
程式碼非常簡單明瞭。input()接受要編歷的所有檔案路徑的列表,通過filename()返回當前正在讀取的檔案的檔名,filelineno()返回當前讀取的行的行號,而lineno()返回當前已經讀取的行的數量(或者序號)。其實,模組內部通過FileInput類來實現檔案的編歷讀取,input()在內部建立了該類的一個物件,當處理完資料行之後,通過fileinput.close()來關閉這個內部物件。
模組非常簡單,詳細的內容可以引數標準庫手冊。