【问题标题】:python library to extract date format from given string [duplicate]python库从给定字符串中提取日期格式[重复]
【发布时间】:2016-11-04 07:46:18
【问题描述】:

我们有python库日期时间库,可以使用以下方法将字符串日期转换为指定格式的日期类型:

datetime.strptime("2016-12-21", "%Y-%m-%d")

但是我们有没有任何库,给定一个日期字符串建议日期的格式。 对于给出的示例:

2016-12-21

作为输入,给出输出:

%Y-%m-%d

【问题讨论】:

  • 这样的库应该如何判断2016-11-04中的11是月还是日?
  • 同意 Lutz,但经常有同样的问题,然后通常 O(1000) 这样的字符串日期可用。所以我循环蛮力并尝试将一组给定的格式与strptime 匹配,并希望得到一个独特的匹配。
  • 你的目的是什么?正如 Lutz 所说,这是一个一对多的问题。
  • 我知道很难想出那样的格式...大多数时候...当我们提取网络数据时...我们遇到各种日期格式...我们得到什么通常是具有不同格式的字符串日期...如果我们有任何机制来检测日期格式..概括起来真的很好......请原谅我太天真了......
  • 这在various forms 中不仅可以说是题外话it has been asked before

标签: python datetime


【解决方案1】:

我不知道具有您所要求的功能的库,但编写一个返回给定字符串的匹配格式的函数并不难。

虽然这并没有解决字符串匹配不止一种格式的问题。

这里是一些基于数字的日期的静态常见格式的示例。

date_formats = ["%Y-%m-%d", "%d-%m-%Y", "%m-%d-%Y", "%Y/%m/%d", "%d/%m/%Y", "%m/%d/%Y", "%Y.%m.%d", "%d.%m.%Y", "%m.%d.%Y", "%c", "%x"]

def string_to_date(str):
    match = []
    for fmt in date_formats:
        try:
            datetime.strptime(str, fmt)
        except ValueError as e:
            print(e)
            continue
        match.append(fmt)
    return match

还有一些代表性的输出:

print(string_to_date("11.12.2015"))  # ['%d.%m.%Y', '%m.%d.%Y']
print(string_to_date("21/12/2015"))  # ['%d/%m/%Y']

当然,您可以编写代码来动态构建您的格式,但我认为在这种情况下,它变得太宽泛了。

如果您采用动态方法,我建议您先在脚本中捕获可能的分隔符,然后尝试构建格式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-29
    • 2016-08-04
    • 1970-01-01
    • 2015-06-18
    • 1970-01-01
    • 1970-01-01
    • 2011-08-27
    • 1970-01-01
    相关资源
    最近更新 更多