2011-01-29 66 views
0

我有一個問題,我想要讀取文件,搜索任何具有會話ID(例如12345)的行,如果匹配,然後打印所有行,直到遇到換行符。 之後,我如何將所有這些行關聯到會話ID,如果我需要進一步解析這些行。 我想用Python做。如何解析文本

感謝

+0

`打印所有行之後,直到遇到換行符 - 看起來它將只有1行。請更具體。你的問題太籠統了。 – Elalfer 2011-01-29 02:24:24

+0

這是非常簡單的寫作,但具體將由您的文件格式 - 這是什麼?另外,「打印所有行......直到遇到換行符」沒有意義,因爲所有行將以換行符結束。你究竟是什麼意思? – payne 2011-01-29 02:25:24

+0

有點偏離主題,但你是如何得到這個用戶ID的。 「user589837」 – Neo 2011-01-29 02:41:47

回答

3

這個回答你的問題的第一部分:

with open('myfile.txt') as f: 
    for line in f: 
     if '12456' in line: 
      print line 

我不明白你問別的什麼。你能翻譯:「如果我需要進一步解析這些行,我如何將所有這些行關聯到會話ID」?

2

我會假設你的日誌文件的格式如下

session 321: abc de 
    567 89 abd ec 

session 12345: ghi lm 
    763 98 dba ce 

和你想做的事,直到你看到一個空行的是找到合適的會議和所有後續行的內容。

import collections 
import re 

sessionData = collections.defaultdict(list) 
lookfor = [12345, 13981] 
newSession = re.compile(r'session (\d+):') 

with open('my_log_file.txt', 'r') as inf: 
    session = None 
    for ln in inf: 
     ln = ln.rstrip() 
     if len(ln): 
      match = newSession.match(ln) 
      if match: 
       s = int(match.group(0)) 
       if s in lookfor: 
        session = s 
      if session: 
       print ln 
       sessionData[session].append(ln) 
     else: 
      session = None 

sessionData現在是一個會話密鑰字典;對於每個會話,它都包含所有相關行的列表。使用上面的示例數據,sessionData看起來像

{ 12345: ["session 12345: ghi lm", " 763 98 dba ce"] }