用 Python 解析文本文件?! txt单词的独特模式

Posted

技术标签:

【中文标题】用 Python 解析文本文件?! txt单词的独特模式【英文标题】:Text File Parsing with Python?! unique pattern of txt words 【发布时间】:2022-01-17 22:20:57 【问题描述】:

我正在尝试从文本文件中解析一系列消息,并使用 Python (2.7.3) 或任何其他 python 版本将它们保存为 txt 文件。

我有这样的 .txt 文件:

[#11:23][INFO][0x0015a] it's here and it's optimally required start index[1] , length[15]
INFO isn't NULL
[#12:25][PERFECT][0x0015a] process returned as NULL load index[1] , length[20] , type[0]
[#13:3][INFO][0x0015a] it's here and it's optimally required start index[1] , length[15]
PERFECT isn't NULL
[#4:23][INFO][0x0015a] it's here and it's optimally required start index[1] , length[15]
Time is here [Tick:135055] , Time:  17, index: 608, CastedType:20002, area :0
[#15:23][INFO][0x0015a] it's here and it's optimally required start index[1] , length[15]
[#16:25][PERFECT][0x0015a] process returned as NULL load index[1] , length[20] , type[0]
[#17:3][INFO][0x0015a] it's here and it's optimally required start index[1] , length[15]
[#8:23][INFO][0x0015a] it's here and it's optimally required start index[1] , length[15]
time is here [Tick:135055] , Time:  17, index: 608, CastedType:20002, area :0
[#16:23][INFO][0x0015a] it's here and it's optimally required start index[1] , length[15]
[#14:25][PERFECT][0x0015a] process returned as NULL load index[1] , length[20] , type[0]
[#18:3][INFO][0x0015a] it's here and it's optimally required start index[1] , length[15]
[#6:23][INFO][0x0015a] it's here and it's optimally required start index[1] , length[15]
Time is here [Tick:135055] , Time:  17, index: 608, CastedType:20002, area :0

这是 txt 具有的所有行的类型格式,因此每一行在给定的 txt 文件中重复,并且它有自己独特的模式,如我上面所示,其中关键字 [INFO] , [PERFECT] 不会根据消息更改这些关键字值在此消息模式中不会更改。 考虑每一行都是一条新消息,因此在每一行都有一条新消息开始。

我试图在 python 中实现一个函数,该函数逐行读取 txt 文件,并且那里的所有行都有我上面提到的这种类型的模式,并以这种特定类型转储所有行:

[#12:25][PERFECT][0x0015a] process returned as NULL load index[1] , length[20] , type[0]

到另一个 txt 文件。所以如果我转到另一个 txt 文件,我会看到那里的所有行都有这种类型的消息:

[#12:25][PERFECT][0x0015a] process returned as NULL load index[1] , length[20] , type[0]

现在在从给定的 txt(input txt) 嗅探这种类型的消息之后,我需要逐行读取我生成的具有特定消息类型的新 txt 文件,然后获取加载索引值并将它们转储到另一个只有负载索引值的 txt 文件。

所以在我上面的例子中,我会得到这样的:

给定 txt 文件:(这是 .txt 文件作为输入)

[#11:23][INFO][0x0015a] it's here and it's optimally required start index[1] , length[15]
INFO isn't NULL
[#12:25][PERFECT][0x0015a] process returned as NULL load index[1] , length[20] , type[0]
[#13:3][INFO][0x0015a] it's here and it's optimally required start index[1] , length[15]
PERFECT isn't NULL
[#4:23][INFO][0x0015a] it's here and it's optimally required start index[1] , length[15]
Time is here [Tick:135055] , Time:  17, index: 608, CastedType:20002, area :0
[#15:23][INFO][0x0015a] it's here and it's optimally required start index[1] , length[15]
[#16:25][PERFECT][0x0015a] process returned as NULL load index[1] , length[20] , type[0]
[#17:3][INFO][0x0015a] it's here and it's optimally required start index[1] , length[15]
[#8:23][INFO][0x0015a] it's here and it's optimally required start index[1] , length[15]
time is here [Tick:135055] , Time:  17, index: 608, CastedType:20002, area :0
[#16:23][INFO][0x0015a] it's here and it's optimally required start index[1] , length[15]
[#14:25][PERFECT][0x0015a] process returned as NULL load index[1] , length[20] , type[0]
[#18:3][INFO][0x0015a] it's here and it's optimally required start index[1] , length[15]
[#6:23][INFO][0x0015a] it's here and it's optimally required start index[1] , length[15]
Time is here [Tick:135055] , Time:  17, index: 608, CastedType:20002, area :0

函数的结果/输出:

    生成 txt 文件,其中包含我上面解释的 某些模式 的所有行(所有行都包含单词 [PERFECT],因此生成的 txt 文件应包含所有具有 [PERFECT] 的消息/行:

    [#12:25][PERFECT][0x0015a] 进程返回为 NULL 加载 index[1] , length[20] , type[0] [#16:25][PERFECT][0x0015a] 进程返回为 NULL 加载 index[1] , length[20] , type[0] [#14:25][PERFECT][0x0015a] 进程返回为 NULL 加载 index[1] , length[20] , type[0]

    然后为加载索引值生成另一个新的 txt 文件,在我的情况下,加载索引值在单词 load index ( load index [value] ) 的 [ ] 中找到,因此该函数应将值转储到新的 txt 文件中将加载索引 作为列 放入另一个新生成的 txt 文件中:

1 1 1

如何在 python 中解析包含上述模式和消息行的文本文件?

简单来说,我想在给定的 txt 文件上逐行(逐个消息)运行我上面解释的消息模式,然后将所有具有关键字 [PERFECT] 的消息解析到新的 txt 文件中括号,所以我将在新生成的 txt 文件中只包含关键字 [PERFECT] 的消息。 现在有了这个新生成的文件,它只嗅探了具有关键字 [PERFECT] 的消息,然后循环并传递这个新生成的文件中的每条消息(具有唯一模式 [PERFECT] 的嗅探消息)以获得值出现在每条消息中的负载索引 [值] 在我的情况下是 1 1 1 因为负载索引 [1] 在三个消息中显示为 1 。加载索引值应转储到另一个新的 txt 文件中,该文件以加载索引值作为列。

非常感谢您的合作!

【问题讨论】:

【参考方案1】:
def get_statuses(s, t):
    statuses = []
    for line in s.splitlines():
        if line.startswith("[#"):
            meta, content = line.split(" ", 1)
            time, status, code = meta.split("][")
            time, code = time[2:], code[:-1]
            index = re.search(r'(index\[)(\d+)(\])', content).group(2)
            if status == t:
                statuses.append(
                    'time': time, 'code': code, 'content': content, 'index': index
                )
    return statuses

它会输出:

['time': '12:25',
  'code': '0x0015a',
  'content': 'process returned as NULL load index[1] , length[20] , type[0]',
  'index': '1',
 'time': '16:25',
  'code': '0x0015a',
  'content': 'process returned as NULL load index[1] , length[20] , type[0]',
  'index': '1',
 'time': '14:25',
  'code': '0x0015a',
  'content': 'process returned as NULL load index[1] , length[20] , type[0]',
  'index': '1']

您可以将函数输出用于csv.DictWriter()

【讨论】:

非常感谢您的回复,非常有用,非常感谢。但是我如何获取在负载索引 [value] 中找到的负载索引的值,所以在我的情况下它是 1 1 1 ,所以我如何将它们解析为另一个文本作为只有负载索引值的列:1 1 1 ?非常感谢 ! ! ! 我想要做的是将关键字 [PERFECT] 和括号 [PERFECT] 的消息转储到一个新的 txt 文件中,这样新的 txt 文件就只有这些类型的消息。然后传递具有此模式 [PERFECT] 的仅包含行(消息)的生成 txt 文件,并获取新生成的 txt 文件中每条消息的加载索引的值,并将所有这些值转储到另一个新的 txt 文件中。 .所以在我的情况下,它将具有列值:1 1 1 你必须在行内容上使用 re.search()。我更新了答案。 我了解您的方法,非常感谢,但它不会将负载索引的值转储到新的 txt 生成文件中。请在此处重新阅读我的最后一条评论,希望它清楚。首先我需要循环输入给定文件,然后嗅探所有具有 [PERFECT] 关键字的消息并将这些消息转储到新生成的 txt 文件中,然后循环遍历新生成的 txt 文件并嗅探/选择负载索引的值将它们转储到另一个新生成的 txt 文件中。输入是具有所有类型消息的函数的 txt 文件 .. 输出也应是 txt 文件 Lucian .. 不是字符串 希望你能理解我,如果不清楚,请更新我的帖子。

以上是关于用 Python 解析文本文件?! txt单词的独特模式的主要内容,如果未能解决你的问题,请参考以下文章

使用python从txt文件中提取单词

任意一个英文的纯文本文件,统计其中的单词出现的个数(shell python 两种语言实现)

急求:如何用python删除文本中的重复行?

如何让 Python 从文本文件中读取和提取单词? [复制]

解析python中的单词列表

word2vec如何解析文本文件?