【问题标题】:Parse line with unknown delimiters解析带有未知分隔符的行
【发布时间】:2014-05-13 17:19:02
【问题描述】:

有什么办法,如何解析包含某种格式和值的日期的行?我正在寻找通用解决方案。我正在编写脚本,它应该验证字符串。我的输入是一些字符串和时间格式。例如:

在第一个文件和已知时间格式中

[10:17:21 20.04.1911] 890.584
[%H:%M:%S %d.%m.%Y]

第二个文件和已知时间格式

10:17:21-20.04.1911 890.584
%H:%M:%S-%d.%m.%Y

在第三个文件和已知时间格式中

(20-04-1911) 890.584
(%d-%m-%Y)

第四个文件和已知时间格式

20-04-1911 10:17:21 890.584
%d-%m-%Y %H:%M:%S


我已经具有根据时间格式从日期获取时间戳的功能,但我不知道如何从该行解析日期。
有任何想法吗?谢谢。

【问题讨论】:

标签: python parsing date


【解决方案1】:

我会在这里使用try

import datetime

def parse_date(line):
    for template, length in [("[%H:%M:%S %d.%m.%Y]", 21), 
                             ("%H:%M:%S-%d.%m.%Y", 19), ...]:
        try:
            return datetime.datetime.strptime(line[:length], template)
        except ValueError:
            pass

这将适用于所有模板,return 一个datetime 对象,如果它可以从linereturn None 中提取一个,如果没有模板匹配。

【讨论】:

  • 就是这样!它工作正常,除了 len(模板)。如果日期格式模板中有 %Y,则表示 4 个字符(全年),所以我必须提出条件,但没问题。
  • 啊,对不起。而不是条件,您可以拥有一个元组列表 (template, length) 并遍历这些对。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-28
  • 2016-04-17
  • 2013-03-04
相关资源
最近更新 更多