如果您不知道日期输入的格式,如何格式化日期字符串?

时间:2018-07-02 17:07:47

标签: python python-2.7 datetime

我必须根据文件名通读大量文件。它们的格式可以为Y-M-D,YMD,M_D_Y或Y_M_D。可能还有其他人,但此刻我就可以与之共事。

我需要能够提取使用正则表达式已经完成的日期,并将其格式化为YMD格式。例如,如果我的输入字符串是06_12_2018,则需要能够将其格式化为20180612,以便以后可以与另一个文件进行比较。

到目前为止,我已经尝试过:

def cleanDate(date):
    datePatterns = [“%Y%m%d”, “%Y_%m_%d”, “%Y-%m-%d”, “%m_%d_%Y”]
    for pattern in datePatterns:
        if date in datePatterns:
            return datetime.strftime(date, “%Y%m%d”)
        else:
            print “String format not found!”
            return

现在我正在查看它,所以if date in datePatterns变得没有意义。解决此问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:3)

最好的方法是使用try / except:

for pattern in datePatterns:
    try:
        return datetime.strptime(date, pattern)
    except ValueError:
        pass
else:
    # none of the datePatterns worked
    raise Exception('failed to parse')

请注意,您要的是strptime,而不是strftime。提醒湿件: p 用于 p 鸣叫, f 用于 f 整理。

  

它们的格式可以为Y-M-D,YMD,M_D_Y或Y_M_D。可能还有其他人,但此刻我就可以与之共事。

如果还有其他格式,请考虑改用dateutil.parser,它使用启发式方法猜测格式。它相当流行,经过了考验并且可靠。

>>> from dateutil.parser import parse  # pip install python-dateutil
>>> parse("2018-05-12")
datetime.datetime(2018, 5, 12, 0, 0)