2011-01-29 21 views
0

ファイルを読み込み、セッションID(e.i. 12345)を持つ行を検索して一致する場合は、それ以降のすべての行を改行するまで質問します。そのあとで 、これらの行をさらに解析する必要がある場合、どのようにこれらの行をセッションIDに関連付けることができますか。 そして、私はPythonでそれをやりたいです。テキストを解析する方法

おかげ

+0

「すべての行をそれに遭遇するまで改行します」 - 1行だけに見えるように見えます。より具体的にしてください。あなたの質問はあまりにも一般的です。 – Elalfer

+0

これは簡単に書くことができますが、詳細はファイルフォーマットによって支配されます - それは何ですか?また、すべての行が改行で終わるので、 "改行に遭遇するまで、すべての行を印刷する"という意味はありません。本当に何を意味しましたか? – payne

+0

少し話題ですが、どうやってこのユーザーIDを取得しましたか? "user589837" – Neo

答えて

3

これはあなたの質問の最初の部分に答えます

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

私はあなたが求めていた他に何を理解していませんでした。 「これらの行をさらに解析する必要がある場合、これらの行をセッションIDにどのように関連付けることができますか?」

+0

Coreyに感謝します。私は私の質問ではっきりしていないと思う。私のファイルには、123456のような数字がついていて、123 \ nb:234 \ nと改行のような行が続きます。私は123456が見つかった場合は、空白行を打つまでそれ以降のすべての行を印刷し、123456はファイル内で何度も幸せになるので、セッション123456がすべての行に続いて印刷されるようにしたい。 – pianoman1873

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 

session-keyed dictになりました。セッションごとに、関連するすべての行のリストが含まれています。上記のサンプルデータを使用すると、sessionDataは

のようになります。
{ 12345: ["session 12345: ghi lm", " 763 98 dba ce"] } 
+0

Hughに感謝します。 12345のような同じセッションIDを持つ行がたくさんある場合は、すべての行を表示するか、最初の1回だけ表示しますか?そのセッションIDの行は、ファイル内に異なるタイムスタンプで何度も表示されるため、そのセッションIDを持つすべての行を表示したいと思います。どうもありがとう。 – pianoman1873

+0

@ user589837:すべてを収集し、sessionData [sessionID]で参照されるリストに追加します。 –

関連する問題