用 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单词的独特模式的主要内容,如果未能解决你的问题,请参考以下文章
任意一个英文的纯文本文件,统计其中的单词出现的个数(shell python 两种语言实现)