验证 Python 中一组日期的方法
way to validate a set of dates in Python
我有一组日期,我正在使用以下方法来验证它们。我想确认使用这么多 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)
根据@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))
原文post:
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))
我有一组日期,我正在使用以下方法来验证它们。我想确认使用这么多 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)
根据@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))
原文post:
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))