反向读取文件,直到Python中的特定行(字符)

时间:2014-11-24 10:44:37

标签: python reverse large-files readfile

我有一个大型日志文件。 我每分钟都会添加操作系统的最新活动。 它看起来像:

#@#@#@#@#@#@#@ 
Time:12:00 PM, CPU:12.0,RAM:12334321,Network:1231231233,....
#@#@#@#@#@#@#@
Time:12:01 PM, CPU:14.0,RAM:12354621,Network:1239864833,....
#@#@#@#@#@#@#@
Time:12:02 PM, CPU:9.0,RAM:12398781,Network:1231598697,....
#@#@#@#@#@#@#@

我用“#@#@#@#@#@#@#@”作为分隔符。 每次我打开文件并写入(添加)当前状态然后关闭它。

要计算一些参数,我需要知道系统的最后一个情况,所以我需要打开文件并反向读取文件,直到我到达分隔符(#@#@#@#@# @#@#@)。 如何反向读取文件直到特定字符(在我的情况下是分隔符)(#@#@#@#@#@#@#@)并将其(操作系统的最后记录)放入列表或元组中。

谢谢!

1 个答案:

答案 0 :(得分:1)

import re
p = re.compile(r'#@#@#@#@#@#@#@(?!.*?#@#@#@#@#@#@#@)(.*)$', re.DOTALL)
test_str = "#@#@#@#@#@#@#@ \nTime:12:00 PM, CPU:12.0,RAM:12334321,Network:1231231233,....\n#@#@#@#@#@#@#@\nTime:12:01 PM, CPU:14.0,RAM:12354621,Network:1239864833,....\n#@#@#@#@#@#@#@\nTime:12:02 PM, CPU:9.0,RAM:12398781,Network:1231598697,....\n#@#@#@#@#@#@#@\nTime:12:02 PM, CPU:9.0,RAM:12398781,Network:1231598697,....\nasasdas\ndsa\nd\n\nasd"

re.findall(p, test_str)

此处代替test_str,您可以使用file.read()。请参阅演示。

http://regex101.com/r/yP3iB0/21