(Python)解析文件以避免性能问题的最佳方法
我有点担心哪种方式最好处理一个必须隔离信息的文件.
例如,想象一个日志文件,其中数据以块为单位划分,每个块都有一个子块列表. 日志文件示例: 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 ..... 现在我正在使用这种方法: 第一个名为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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |