我必须根据文件名通读大量文件。它们的格式可以为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
变得没有意义。解决此问题的最佳方法是什么?
答案 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)