首页 / PYTHON / Python,日期验证
Python,日期验证
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python,日期验证,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3170字,纯文字阅读大概需要5分钟。
内容图文
![Python,日期验证](/upload/InfoBanner/zyjiaocheng/808/c289fa0620d844699270e976fdcf5732.jpg)
我试图想出一种以最好的pythonic方式实现这一目标的方法.现在,我能想到的唯一方法就是暴力破解它.
用户以下列方式之一输入日期(通过命令行)(例如./mypy.py date =’20110909.00 23′)
date='20110909'
date='20110909.00 23'
date='20110909.00 20110909.23'
所有这三个例子都应该有相同的结果,如果它填充一个列表(我可以排序),例如
['20110909.00', '20110909.23]
或者甚至是两个排序的单独变量,但在所有情况下它都是YYYYMMDD.HH,并且需要确保它确实是日期而不是文本.
有任何想法吗?
谢谢.
编辑
在插上这个之后,我想我需要先做很多日期检查/操作.这一切似乎都很有效.除了在最后,我通过日期验证运行列表,它每次都失败 – 即使它应该通过.
(我发布它)
./test.py date =’20110909.00 23′
(或日期的任何变化 – 即日期= ’20 22’或日期=’20110909’或日期=’20110909.00 23’等)
import sys, re, time, datetime
now = datetime.datetime.now()
tempdate=[]
strfirstdate=None
strtempdate=None
temparg2 = sys.argv
del temparg2[0]
tempdate = temparg2[0].replace('date=','')
date = tempdate.split(' ');
tempdate=[]
date.sort(key=len, reverse=True)
result = None
# If no date is passed then create list according to [YYMMDD.HH, YYMMDD.HH]
if date[0] == 'None':
tempdate.extend([now.strftime('%Y%m%d.00'), now.strftime('%Y%m%d.%H')])
# If length of date list is 1 than see if it is YYMMDD only or HH only, and create list according to [YYMMDD.HH, YYMMDD.HH]
elif len(date) == 1:
if len(date[0]) == 8:
tempdate.extend([ date[0] + '.00', date[0] + '.23'])
elif len(date[0]) == 2:
tempdate.extend([now.strftime('%Y%m%d') + '.' + date[0], now.strftime('%Y%m%d') + '.' + date[0]])
else:
tempdate.extend([date[0], date[0]])
# iterate through list, see if value is YYMMDD only or HH only or YYYYMMDD.HH, and create list accoring to [YYYYMMDD.HH, YYYYMMDD.HH] - maximum of 2 values
else:
for _ in range(2):
if len(date[_]) == 8:
strfirstdate = date[0]
tempdate.append([ date[_] + '.00'])
elif len(date[_]) == 2:
if _ == 0: # both values passed could be hours only
tempdate.append(now.strftime('%Y%m%d') + '.' + date[_])
else: # we must be at the 2nd value passed.
if strfirstdate == None:
tempdate.append(now.strftime('%Y%m%d') + '.' + date[_])
else:
tempdate.append(strfirstdate + '.' + date [_])
else:
strfirstdate = date[0][:8]
tempdate.append(date[_])
tempdate.sort()
for s in tempdate:
try:
result = datetime.datetime.strptime(s, '%Y%m%d.%H')
except:
pass
if result is None:
print 'Malformed date.'
else:
print 'Date is fine.'
print tempdate
编辑2
如果我删除底部(在tempdate.sort()之后)并用它替换它.
strfirstdate = re.compile(r'([0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]+\.[0-9][0-9])')
for s in tempdate:
if re.match(strfirstdate, s):
result = "validated"
else:
print "#####################"
print "#####################"
print "## error in date ##"
print "#####################"
print "#####################"
exit
它将适当地验证.
这整个方法似乎不是非常pythonic.
解决方法:
您可以创建一个掩码并使用try …解析它,除了确定日期字符串是否与多个掩码中的一个匹配.我有一个项目的代码,所以我稍微修改了它:
from time import mktime, strptime
from datetime import datetime
date = '20110909.00 20110909.23'.split(' ')[0]
result = None
for format in ['%Y%m%d', '%Y%m%d.%H']:
try:
result = datetime.strptime(date, format)
except:
pass
if result is None:
print 'Malformed date.'
else:
print 'Date is fine.'
内容总结
以上是互联网集市为您收集整理的Python,日期验证全部内容,希望文章能够帮你解决Python,日期验证所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。