【发布时间】:2020-11-24 06:46:44
【问题描述】:
我正在从一些与此类似的文本文件中解析日期/时间/测量信息:
[Sun Jul 15 09:05:56.724 2018] *000129.32347
[Sun Jul 15 09:05:57.722 2018] *000129.32352
[Sun Jul 15 09:05:58.721 2018] *000129.32342
[Sun Jul 15 09:05:59.719 2018] *000129.32338
[Sun Jul 15 09:06:00.733 2018] *000129.32338
[Sun Jul 15 09:06:01.732 2018] *000129.32352
结果进入如下输出文件:
07-15-2018 09:05:56.724, 29.32347
07-15-2018 09:05:57.722, 29.32352
07-15-2018 09:05:58.721, 29.32342
07-15-2018 09:05:59.719, 29.32338
07-15-2018 09:06:00.733, 29.32338
07-15-2018 09:06:01.732, 29.32352
我使用的代码如下所示:
import os
import datetime
with open('dq_barorun_20180715_calibtest.log', 'r') as fh, open('output.txt' , 'w') as fh2:
for line in fh:
line = line.split()
monthalpha = line[1]
month = datetime.datetime.strptime(monthalpha, '%b').strftime('%m')
day = line[2]
time = line[3]
yearbracket = line[4]
year = yearbracket[0:4]
pressfull = line[5]
press = pressfull[5:13]
timestamp = month+"-"+day+"-"+year+" "+time
fh2.write(timestamp + ", " + press + "\n")
这段代码运行良好,可以满足我的需求,但我正在尝试学习更有效的 Python 文件解析方法。处理一个 100MB 的文件大约需要 30 秒,我有几个大小为 1-2GB 的文件。有没有更快的方法解析这个文件?
【问题讨论】:
-
检查将一堆输出行捆绑成一个更大的字符串然后偶尔将它们写入输出文件是否更快。
-
这里的星期日是
Sun,七月是Jul。其余数据是否也只需要前 3 个字母? -
为什么
000129.32338会导致29.32338? 1去哪儿了? -
我只需要三个字母的月份
Jul(在这种情况下),这样我就可以将它转换为日期格式的07。我不需要Sun -
仪器的原始输出是
*0001,读数是29.32338,所以我不需要1。
标签: python file optimization