需要将奇怪的日期格式设置为正确的格式Python

时间:2018-12-07 23:25:35

标签: python python-3.x python-2.7 datetime format

我的数据带有遵循MMYY格式的日期列。

即: 1119 将是 2019年11月,而 1211 将是 2011年12月 110 < / strong>将会是 2010年1月 .. etc ....

不仅如此,同一列中还有,需要将该年的十二月作为年份。

即: 2011 2011年12月 .. etc ....

此外,有些日期使零意义变得如此!

即: 1616 ,应该是..... 2016年2月1日?

需要完全忽略这些内容(除非有人理解此格式,但我不明白!)

此数据的片段如下所示:

Year  Month  State  Contract   Exp Date
2010  1      OH     S          2017
2010  2      OH     C          1119
2010  1      AK     S          1234
2010  2      AK     S          1616

我该怎么做才能将这些奇怪的日期更改为datetime格式?

1 个答案:

答案 0 :(得分:0)

我要做的是使用一些正则表达式来收集所有数据,并在此处和那里使用一些ifs来检查它+您对该Exp_date的解释(我不太确定...,这可能很简单需要您提取特定格式的数据的练习)

import re

def split_exp_date( date):
    if len(date) > 4:
        return None
    month = int( date[:2])
    year = int( '20' + date[2:])
    if not 0 < month < 13:
        return None

    return month, year

test  = """
Year  Month  State  Contract   Exp Date
2010  1      OH     S          2017
2010  2      OH     C          1119
2010  1      AK     S          1234
2010  2      AK     S          1616
"""

r = re.compile( r'\n(?P<Year>[\d]+) +(?P<Month>[\d]{1,2}) +(?P<State>[\w]+) +(?P<Contract>[\w]+) +(?P<Exp_Date>[\d]+)')

res = r.finditer( test)

for e in res:
    print( e.groupdict())
    split_exp_date( e['Exp_Date'])
    Year = e['Year']
    Month = e['Month']
    State = e['State']
    Contract = e['Contract']
    Exp_Date = split_exp_date( e['Exp_Date'])

    print( Exp_Date)

#{'Year': '2010', 'Month': '1', 'State': 'OH', 'Contract': 'S', 'Exp_Date': '2017'}
#None
#{'Year': '2010', 'Month': '2', 'State': 'OH', 'Contract': 'C', 'Exp_Date': '1119'}
#(11, 2019)
#{'Year': '2010', 'Month': '1', 'State': 'AK', 'Contract': 'S', 'Exp_Date': '1234'}
#(12, 2034)
#{'Year': '2010', 'Month': '2', 'State': 'AK', 'Contract': 'S', 'Exp_Date': '1616'}
#None

这应该以一种更易于访问的形式为您提供数据,您可以根据需要使用/格式化