首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要帮助解析此模式的文件“2010年2月6日15:49:00.017 MCO”

需要帮助解析此模式的文件“2010年2月6日15:49:00.017 MCO”
EN

Stack Overflow用户
提问于 2010-03-02 17:56:55
回答 2查看 109关注 0票数 1

需要解析以“2010年2月6日15:49:00.017 MCO”模式开始的数据行文件,其中MCO可以是任意3个字母ID,并返回该行的整个记录。我想我可以得到第一部分,但返回的其余部分是我迷路的地方。

以下是一些样本数据。

200620102月06 15:49:00.017 MCO -I -I 0.34 527 0.26 0.24 184只-RDR-编号282356N 0811758W - 3-3

2010年2月06 15:49:00.017 MLB -I -I 44.31 3175 -10.05 216只建立0.00 0雷达-RDR-编号281336N 0812939W - 2-

2010年2月06 15:49:00.018 MLB -I -I 44.31 3175 -10.05 216只建立15.51 99雷达-RDR-编号281336N 0812939W - 2-

2010年2月06 15:49:00.023 QML N856 7437-V -I 62-V 61-V 67.00 3420 -30.93 15.34 534建立了328.53 129增强型-编号283900N 0815325 W

2010年2月06 15:49:00.023 QML N516SP 0723-V -I 22-V 21-V 42.25 3460 -8.19 5.03 146只建立了243.93 83信标

02月06 15:49:00.023 QML 2247-V -I 145-V 144-V 78.88 3443 -39.68 23.68 676成立177.66 368增强型-编号284719N 0820325W

2010年2月06 15:49:00.023 MLB 1200-V -I 15-V 14-V 45.25 3015 -11.32 -20.97 475只建立了349.68 88信标

2010年2月06 15:49:00.023 MLB 1011-V -I 91-V 90-V 94.50 3264 -56.77 10.21 698成立152.28 187信标

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-03-03 00:08:11

似乎您的日期+3字符总是前5个字段(以空格作为分隔符)。只需遍历文件,并对每一行在空格上进行分割。然后得到前5个字段

代码语言:javascript
复制
s=Split(strLineOfFile," ")
wscript.echo s(0),s(1),s(2),s(3),s(4)

不需要正则表达式

票数 0
EN

Stack Overflow用户

发布于 2010-03-02 18:11:04

从您的示例数据来看,您似乎不必在日期之后检查是否存在三个字母标识符--它总是在那里。如果这不是一个有效的假设,那么在正则表达式中添加最后三个字母。此外,根据需要添加更多的分组,以使regex组对您有用。总之:

代码语言:javascript
复制
import re
dtre = re.compile(r'^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{2} [0-9]{4} [0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{3}')

[line for line in file if dtre.match(line)]

将其包装在with语句或任何打开文件的东西中,然后在所生成的列表中执行所需的任何处理。

另一种可能是使用生成器表达式而不是列表理解(将外部[]替换为() )。如果您要将结果输出到某个地方,那么这个文件是很大的,并且您不需要为了不同的目的将其全部存储在内存中,这是非常有用的。如果采用这种方法,请确保在使用整个生成器之前不要关闭该文件!

此外,您还可以使用datetime的内置解析工具:

代码语言:javascript
复制
import datetime

for line in file:
    try:
        # the line[:24] bit assumes you're always going to have three-digit
        # µs part
        dt = datetime.datetime.strptime(line[:24], '%b %d %Y %H:%M:%S.%f')
    except ValueError:
        # a ValueError means the beginning of the line isn't parseable as datetime
        continue
    # do something with the line; the datetime is already parsed and stored in dt

如果您无论如何都要创建datetime.datetime对象,这可能会更好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2365445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档