如何解析文本

时间:2011-01-29 02:17:53

标签: python file string

我有一个问题,我想读取一个文件,搜索任何有会话ID(e.i。12345)的行,如果匹配则打印所有行,直到遇到换行符。 之后,如果我需要进一步解析这些行,如何将所有这些行关联到会话ID。 我想用Python做到这一点。

由于

2 个答案:

答案 0 :(得分:3)

这回答了你问题的第一部分:

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

我不明白你还要求什么。你能翻译:“如果我需要进一步解析这些行,我如何将所有这些行与会话ID相关联?”

答案 1 :(得分: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"] }