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

标签 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是没有意义的。解决这个问题的最佳方法是什么?

最佳答案

最好的方法是使用 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/

相关文章:

python - 具有非恒定容量的传导扩散热二维模型

python - 如何与其他json对象的值进行比较

java - 为不同的时区转换没有时间的日期

python - 转换为 UTC 时间戳

java - 两次相加,一次是字符串,一次是HH :mm in java的日期

python - 合并和采样两个 Pandas 时间序列

python - 无法使用 PyQuery 解析大 HTML

python-2.7 - OpenCV 3.0.0-beta 缺少 KNN?

python - 任意嵌套列表的过滤函数

路由中的 Python3 Flask asyncio 子进程挂起