我有点担心哪种方式最适合处理包含必须隔离的信息的文件。
例如,想象一个日志文件,其中的数据分为块,每个块都有一个子块列表。
日志文件示例:
data
data
data
data
block 1 start
-sub block 1 start
--data x
--data y
-sub block 1 end
-sub block 2 start
--data x
--data marked as good
--data z
-sub block 2 end
block 1 end
block 1 summary
block 2 start
-sub block 1 start
.....
-sub block 1 end
....
data
data
data
我正在寻找一种有效的方法来解析更大的文件(这是各种 mb 的文本),隔离块,然后在每个块中检查子块中的特定行。如果该行在子块中,我将保存子块所在的块开始和结束行,以及该行所在的子块(但会丢弃其他没有数据的子块)。直到我到达文件的末尾。
结果应如下所示的示例:
block 1 start
-sub block 2 start
--data marked as good
-sub block 2 end
block 1 summary
.....
现在我正在使用这种方法:我打开文件,然后将文件分成较小的子集以使用;我有 3 个收集信息的列表。
第一个列表,称为 List_general,将包含整个日志文件中的解析结果,减去与我需要隔离的块无关的内容。基本上在这一步之后,我将只有上面示例中的块,减去“数据”行。当我这样做时,我会检查“好数据”字符串,所以如果我看到该字符串至少一次,这意味着我需要处理和保存数据,否则我就结束函数。
如果有数据需要处理,我会在list_general中逐行进行,并开始隔离每个块和子块。从第一个块开始(如果您查看示例,那么从块 1 开始到块 1 的摘要)。
一旦我到达一个块的末尾(块 1 摘要);如果有数据标记为好,我会开始解析它,遍历每个子块,找出哪个数据好。
我将逐行复制每个子块,就像我对块所做的那样(基本上开始从“子块1开始”到“子块1结束”逐行复制)并检查好数据是否在那个子堵塞。如果是,我会将列表内容复制到最终列表,否则我将删除列表并从下一个子块开始。
我知道这种解析每个部分的机制非常繁琐且资源昂贵;所以我想知道是否有“更好”的方法来做到这一点。我对 python 很陌生,所以我不确定如何处理类似问题的方法。希望这里有人有类似的问题,所以可以建议我面对这个问题的最佳方法。