对于发布这个有点犹豫 - 就我而言,这是一个真正的问题,但我想我会理解它是否被批评或关闭作为讨论邀请......
无论如何,我需要使用Python来搜索特定事件的一些非常大的Web日志。 RegEx会很好,但我并不依赖于任何特定方法 - 我只想要包含两个字符串的行,这些字符串可以出现在GET请求中的任何位置。
由于典型文件超过400mb并且包含大约一百万行,因此在完成和加载服务器(ubuntu / nginx VM - 相当好的规格和很少过度工作)方面的性能可能是问题
我是一个相当新近的Python转换(注意相当新手,但仍然有很多东西要学习),我想要一些关于实现这个目标的最佳方法的指导
我打开并迭代? Grep到一个新文件,然后打开? 两者的某种组合? 别的什么?
答案 0 :(得分:2)
只要你不是一次读取整个文件但是不断地重复它,你应该没问题。我认为无论你是用python还是用grep
读取整个文件都没关系,你还是要加载整个文件:)。如果你利用发电机,你可以做到这一点真正的程序员友好:
# Generator; fetch specific rows from log file
def parse_log(filename):
reg = re.prepare( '...')
with open(filename,'r') as f:
for row in f:
match = reg.match(row)
if match:
yield match.group(1)
for i in parse_log('web.log'):
pass # Do whatever you need with matched row