ファイルを読み込み、セッションID(e.i. 12345)を持つ行を検索して一致する場合は、それ以降のすべての行を改行するまで質問します。そのあとで 、これらの行をさらに解析する必要がある場合、どのようにこれらの行をセッションIDに関連付けることができますか。 そして、私はPythonでそれをやりたいです。テキストを解析する方法
おかげ
ファイルを読み込み、セッションID(e.i. 12345)を持つ行を検索して一致する場合は、それ以降のすべての行を改行するまで質問します。そのあとで 、これらの行をさらに解析する必要がある場合、どのようにこれらの行をセッションIDに関連付けることができますか。 そして、私はPythonでそれをやりたいです。テキストを解析する方法
おかげ
これはあなたの質問の最初の部分に答えます
with open('myfile.txt') as f:
for line in f:
if '12456' in line:
print line
私はあなたが求めていた他に何を理解していませんでした。 「これらの行をさらに解析する必要がある場合、これらの行をセッションIDにどのように関連付けることができますか?」
Coreyに感謝します。私は私の質問ではっきりしていないと思う。私のファイルには、123456のような数字がついていて、123 \ nb:234 \ nと改行のような行が続きます。私は123456が見つかった場合は、空白行を打つまでそれ以降のすべての行を印刷し、123456はファイル内で何度も幸せになるので、セッション123456がすべての行に続いて印刷されるようにしたい。 – pianoman1873
私はあなたのログファイルが
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"] }
Hughに感謝します。 12345のような同じセッションIDを持つ行がたくさんある場合は、すべての行を表示するか、最初の1回だけ表示しますか?そのセッションIDの行は、ファイル内に異なるタイムスタンプで何度も表示されるため、そのセッションIDを持つすべての行を表示したいと思います。どうもありがとう。 – pianoman1873
@ user589837:すべてを収集し、sessionData [sessionID]で参照されるリストに追加します。 –
「すべての行をそれに遭遇するまで改行します」 - 1行だけに見えるように見えます。より具体的にしてください。あなたの質問はあまりにも一般的です。 – Elalfer
これは簡単に書くことができますが、詳細はファイルフォーマットによって支配されます - それは何ですか?また、すべての行が改行で終わるので、 "改行に遭遇するまで、すべての行を印刷する"という意味はありません。本当に何を意味しましたか? – payne
少し話題ですが、どうやってこのユーザーIDを取得しましたか? "user589837" – Neo