【问题标题】:way to validate a set of dates in Python在 Python 中验证一组日期的方法
【发布时间】:2018-08-22 02:15:13
【问题描述】:

我有一组日期,我正在使用以下方法来验证它们。我想确认使用这么多的 try-except 块是正确的方法还是有更好的方法?

此外,日期可能是其他格式,例如 dd/mm/yyyy,所以我应该包括所有可能的格式还是有更好的方法?

dob="""
10/23/1964
9/14/2010
12-23-98
"""

try:
    date_time= datetime.strptime(dob, '%m/%d/%Y')
except:
       try:
           date_time= datetime.strptime(dob, '%m-%d-%Y')
       except:
              try:
                  date_time= datetime.strptime(dob, '%m/%d/%y')
              except:
                     try:
                         date_time= datetime.strptime(dob, '%m-%d-%y') 
                     except:
                            date_time="invalid date"
print(date_time)

【问题讨论】:

  • 我认为您可以将正则表达式 regexp 用于不同的日期格式并使用它们进行验证。

标签: regex python-3.x data-extraction


【解决方案1】:

@Mad Physicist的要求:

dob = '''
10/23/1964
9/14/2010
12-23-98
'''

def validate(sdatetime):
    for pattern in [
        '%m/%d/%Y',
        '%m-%d-%Y',
        '%m/%d/%y',
        '%m-%d-%y',
    ]:
        try:
            # return upon success
            return datetime.strptime(sdatetime, pattern)
        except ValueError:
            pass
            # handle the error if you want

    return "invalid date"

for line in dob.splitlines():
    if line:
        print(line, validate(line))

原帖:

dob = '''
10/23/1964
9/14/2010
12-23-98
'''

def validate(sdatetime):
    for fn in [
        lambda sdatetime: datetime.strptime(sdatetime, '%m/%d/%Y'),
        lambda sdatetime: datetime.strptime(sdatetime, '%m-%d-%Y'),
        lambda sdatetime: datetime.strptime(sdatetime, '%m/%d/%y'),
        lambda sdatetime: datetime.strptime(sdatetime, '%m-%d-%y'),
        lambda sdatetime: "invalid date"
    ]:
        try:
            # return upon success
            return fn(sdatetime)
        except ValueError:
            pass
            # handle the error if you want

for line in dob.splitlines():
    if line:
        print(line, validate(line))

【讨论】:

  • 我建议只将模式放在列表中并使用forelse 子句返回无效消息
猜你喜欢
  • 2018-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多