gpt4 book ai didi

python - 有效地解析日期时间的文本文件

转载 作者:太空宇宙 更新时间:2023-11-04 03:31:46 24 4
gpt4 key购买 nike

我有一些看起来像这样的文本文件

<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

我需要获取两个日期时间之间日志中的所有信息。目前,我从我在两者之间搜索的每个时间创建了一个日期时间对象。

然后我逐行读取文件并创建一个新的日期时间对象,将其与我的开始时间和结束时间进行比较,看看我是否应该获取该行信息。然而,文件很大 (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 天的数据。

最佳答案

无论如何,您正在将所有文件读入内存,只需遍历文件对象并在日期超出上限时中断:

with  open(fileToParse, "r") as f:
for line in f:
if not line.strip():
continue
lineDateTime = datetime.datetime(lineYear, lineMonth, lineDay, lineHour, lineMin, lineSec)
if startDateTime < lineDateTime < endDateTime:
writeFile.write(line + "\n")
elif lineDateTime > endDateTime:
break

显然你需要得到 lineYear, lineMonth 等等。

使用 f.read().splitlines() 不仅将所有行读入内存所以如果你的 5 行超过上限你仍然有内存中的所有行,你也拆分行,以便您还创建所有行的完整列表。

您还可以检查月/年是否正确,并且只有在您拥有正确的月/年时才创建日期时间对象,这样会快很多。

如果您的行如上所示:

Jun/11 

你想要 Jun/11 然后简单地 if line.startswith("Jun/11") 然后才开始创建 datetime 对象。

with open(fileToParse, "r") as f:
for line in f:
if line.startswith("Jun/11"):
for line in f:
try:
lineDateTime = datetime.datetime...
except ValueError:
continue
if startDateTime < lineDateTime < endDateTime:
writeFile.write(line + "\n")
elif lineDateTime > endDateTime:
break

关于python - 有效地解析日期时间的文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30874773/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com