[英]Comparing numbers and dates in Python
我有一个包含数字和日期的文件,需要将其与今天的值进行比较。 文件的布局是基本的逗号分隔,这是节选:
21,2017-11-22
22,2017-11-23
23,2017-11-24
24,2017-11-27
27,2017-11-28
28,2017-11-29
29,2017-11-30
我有一个Python脚本,需要将每一行的第一个值与今天的日期进行比较。 如果值匹配,那么我将使用同一行中的日期执行下一步。 问题是我无法获得从今天开始的日期以匹配文本文件中的数字。 这是我的脚本:
import datetime
a = open("NovemberDates.txt","r")
current = datetime.date.today()
day = current.day
from datetime import datetime
while True:
line = a.readline()
splitline = line.split(",")
number = splitline[0]
date = splitline[1]
if number == day:
print ('TODAY!!')
else:
print ('NOPE')
input('Press enter to continue: ')
if not line:
break
今天(2017年11月27日)运行此脚本,我希望收到打印的消息“ TODAY !!”。 脚本到达文本文件的第5行时; 27,2017-11-28。 但是我仍然收到“ NOPE”,它告诉我Python无法识别day = current.day
为27。
我需要怎么做才能使这两个值匹配?
number
是一个字符串,而day
是一个int
。 因为Python不会自动强制类型,所以它们永远不能相等。
将number = splitline[0]
更改为number = int(splitline[0])
并准备捕获ValueError
以防splitline[0]
无法转换为int
。
或者,按照@highlycaffeinated的建议,您可以将day
转换为字符串:
day = str(current.day)
。
这有两个好处:
转换将完成一次,并且不会引发ValueError
(因为本质上任何内容都可以转换为字符串)。
以相同的格式获取今天的一天
import datetime
d = datetime.datetime.today()
datetoday = d.strftime("%Y-%m-%d")
确保文件中的数据不包含尾随空格
date = splitline[1].strip()
然后使用此datetoday
与循环中的date
( splitline[1].strip()
)进行比较
最后,不要使用“ while True”在for循环中读取数据。 像这样
import datetime
a = open("NovemberDates.txt","r")
d = datetime.datetime.today()
datetoday = d.strftime("%Y-%m-%d")
from datetime import datetime
for line in a:
splitline = line.split(",")
number = int(splitline[0])
date = splitline[1].strip()
if datetoday == date:
print ('TODAY!!')
print ("the magic number is %d"%number)
break
else:
print ('NOPE')
该类型的number
为字符串,但类型day
为int。 您需要更改此变量之一的类型。 用int(number) == day
或number == str(day)
替换number == day
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.