我必须根据文件名通读大量文件。它们可以不同于 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
是没有意义的。解决这个问题的最佳方法是什么?
最佳答案
最好的方法是使用 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格式化
They can vary from the format Y-M-D, YMD, M_D_Y, or Y_M_D. There could be others but at the moment this is all I am given to work with.
如果可以有其他格式,考虑使用dateutil.parser
相反,它使用启发式方法来猜测格式。它相当受欢迎、久经考验且可靠。
>>> from dateutil.parser import parse # pip install python-dateutil
>>> parse("2018-05-12")
datetime.datetime(2018, 5, 12, 0, 0)
关于python - 如果您不知道日期输入的格式,如何格式化日期字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51140791/