我的文本文件看起来像
<Jun/11 09:14 pm>Information i need to capture1
<Jun/11 09:14 pm> Information i need to capture2
<Jun/11 09:14 pm> Information i need to capture3
<Jun/11 09:14 pm> Information i need to capture4
<Jun/11 09:15 pm> Information i need to capture5
<Jun/11 09:15 pm> Information i need to capture6
两次约会
15/6/2015-16:27:10 # startDateTime
15/6/2015-17:27:19 # endDateTime
我需要抓取两个日期时间之间日志中的所有信息。目前,我做了一个datetime对象从每两次我之间的搜索。你知道吗
然后我逐行读取文件,并创建一个新的datetime对象,将其与开始时间和结束时间进行比较,以确定是否应该获取该行信息。然而,文件是巨大的(150MB),代码可能需要几个小时才能运行(在100多个文件上)。你知道吗
代码看起来像
f = open(fileToParse, "r")
for line in f.read().splitlines():
if line.strip() == "":
continue
lineDateTime = datetime.datetime(lineYear, lineMonth, lineDay, lineHour, lineMin, lineSec)
if (startDateTime < lineDateTime < endDateTime):
writeFile.write(line+"\n")
between = True
elif(lineDateTime > endDateTime):
writeFile.write(line+"\n")
break
else:
if between:
writeFile.write(line+"\n")
我想用更多的技巧重写这个。这些文件可以保存数月的信息,但是我通常只搜索大约1小时到3天的数据。你知道吗
您正在将所有文件读入内存,不管怎样,只需迭代文件对象,并在日期超出上限时中断:
显然你需要得到
lineYear, lineMonth
等等。。你知道吗使用
f.read().splitlines()
不仅可以将所有行读入内存,因此如果您的5行超过上限,那么您的内存中仍然有所有行,您还可以拆分这些行,以便创建所有行的完整列表。你知道吗您还可以检查月份/年份是否正确,并且只有在月份/年份正确的情况下才能创建datetime对象,这样会更快。你知道吗
如果你的台词是从上面开始的:
您想要的是6月11日,然后简单地
if line.startswith("Jun/11")
,然后才开始创建datetime对象。你知道吗相关问题 更多 >
编程相关推荐