繁体   English   中英

比较Python中的数字和日期

[英]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与循环中的datesplitline[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) == daynumber == str(day)替换number == day

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM