2017-09-01 60 views
0

我想獲取從標準VSFTP日誌文件的日期,文件是如下:Python的正則表達式獲取日期格式的日誌文件

Fri Sep 1 15:43:46 2017 1 ::ffff:172.18.1.168 14848 /IT_inventory.xls b _ i r user01 ftp 0 * c 

我試圖用正則表達式:

#!/usr/bin/python 
import re 
    with open("/var/log/xferlog") as log: 
     for line in log: 
      pattern = re.compile(r'(\w+) (\w+)') 
      match = pattern.search(line) 
      print match.group(1) 
      print match.group(2) 

該代碼可以正確獲取日期和月份(組(1)=星期五,組(2)= 9月)。

但我想獲取的日期(1),所以改變圖案:

pattern = re.compile(r'(\w+) (\w+) (\d+)') 
     match = pattern.search(line) 
     print match.group(1) 
     print match.group(2) 
     print match.group(3) 

但輸出變化到46,2017年,1(基團(1)= 46,組(2) = 2017,組(3)= 1)

如果我手動設置行。

line = "Fri Sep 1 15:43:46 2017 1 ::ffff:172.18.1.168 14848 /IT_inventory.xls b _ i r user01 ftp 0 * c" 

pattern = re.compile(r'(\w+) (\w+) (\d+)') 
match = pattern.search(line) 
print match.group(1) 
print match.group(2) 
print match.group(3) 

然後我可以得到我想要的。

組(1)=星期五,組(2)=九月,組(3)= 1

任何人都可以解釋給我嗎?

回答

2

你可以試試這個:

import re 

s = "Fri Sep 1 15:43:46 2017 1 ::ffff:172.18.1.168 14848 /IT_inventory.xls b _ i r user01 ftp 0 * c" 

data = re.findall("^\w+\s\w+", s)[0].split() 

輸出:

['Fri', 'Sep'] 
+0

感謝您的解決方案!有效。但我仍然很好奇。你知道爲什麼我會得到有線結果,如果我通過語法「with」閱讀文件? – Ilikeperl