(Python)解析文件以避免性能问题的最佳方法

(Python)解析文件以避免性能问题的最佳方法,第1张

概述我有点担心哪种方式最好处理一个必须隔离信息的文件. 例如,想象一个日志文件,其中数据以块为单位划分,每个块都有一个子块列表. 日志文件示例: datadatadatadata block 1 start -sub block 1 start --data x --data y -sub block 1 end -sub block 2 star 我有点担心哪种方式最好处理一个必须隔离信息的文件.

例如,想象一个日志文件,其中数据以块为单位划分,每个块都有一个子块列表.

日志文件示例:

datadatadatadata    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    ....datadatadata

我正在寻找一种有效的方法来解析更大的文件(这是各种文本的mb),隔离块,然后在每个块中检查子块中的特定行.如果该行在子块中,我将保存子块所属的块起始行和结束行,以及行所在的子块(但将丢弃其他没有数据的子块).直到我到达文件的末尾.

结果应如何显示的示例:

block 1 start-sub block 2 start--data marked as good-sub block 2 endblock 1 summary.....

现在我正在使用这种方法:
我打开文件,然后将文件分成较小的子集来处理;我有3个收集信息的列表.

第一个名为List_general的列表将包含整个日志文件中解析的结果,减去与我需要隔离的块无关的内容.基本上在这一步之后,我将只有上面例子中的块,减去“数据”行.当我这样做时,我检查“好数据”字符串,所以如果我看到该字符串至少一次,这意味着我需要处理和保存数据,否则我只是结束该功能.

如果有要处理的数据,我会逐行进入List_general并开始隔离每个块和子块.从第一个块开始(所以从块1开始到块1汇总,如果你看一下例子).

一旦我到达一个块的结尾(块1摘要);如果有标记为良好的数据,我将开始解析它,通过每个子块找到哪个具有良好的数据.

我将逐行复制每个子块,就像我对块所做的那样(基本上开始逐行从“子块1开始”复制到“子块1结束”)并检查好数据是否在该子块中块.如果是,我将列表内容复制到最终列表,otehrwise我将删除列表并从下一个子块开始.

我知道这种解析每个部分的机制非常繁琐且资源昂贵;所以我想知道是否有一种“更好”的方式来做到这一点.我对python很新,所以我不确定如何面对类似问题的方法.希望这里有人有类似的问题,所以可以建议我面对这个问题的最佳方式.

解决方法 对于日志文件,当我解析文件时,我会抛弃我不在乎的行,填充sqlite中有用的东西(检查模块sqlite3).然后在我完成解析文件后进行报告/处理.

可以将sqlite配置为使用磁盘或内存作为存储 – 因此您可以根据需要进行选择.

我喜欢这种方法,它是灵活的,我不需要解析任何两次.

补充:有类似的东西吗?

class Parser:    def __init__(self,logfile):        self.log = open(logfile)        self.logentry = []    def next(self):        found = False        for line in self.log:            self.logentry.append(line)                        if <block ends>:                e = '\n'.join(self.logentry)                self.logentry = []                yIEld e
总结

以上是内存溢出为你收集整理的(Python)解析文件以避免性能问题的最佳方法全部内容,希望文章能够帮你解决(Python)解析文件以避免性能问题的最佳方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1196777.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存