微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

需要使用python在txt文件中输出剩余假期

如何解决需要使用python在txt文件中输出剩余假期

节日快乐!

我正在处理需要提前 3 周发送公共假期提醒的项目。我已经完成了这部分,现在需要添加一个功能,除了即将到来的假期外,还会发送今年剩余的假期。由于我是编码新手,因此我将不胜感激任何有关如何解决此问题的提示或建议!

这是我现在的代码

import datetime
from datetime import timedelta
import calendar
import time
import smtplib as smtp
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.message import EmailMessage

holidayFile = 'calendar.txt'

def run(input):
    checkTodaysHolidays()

  
def checkTodaysHolidays(): 
    file = open(holidayFile,'r')
    date = (datetime.date.today() + datetime.timedelta(days=21)).strftime('%Y/%m/%d')
    publicHolidayName = ''
    for line in file: 
        if date in line:
            publicHolidayName = " ".join(line.split()[1:])

谢谢。

解决方法

我认为最简单的方法是使用您已经导入的 datetimetimedelta 模块。

我会将您文本文件中的数据转换为数组,然后构建一个函数,将今天的日期与此列表中的假期进行比较。

holidayFile = open('calendar.txt','r')
holidayLines = holidayFile.readlines()
holidayFile.close()

holidayNames = []
holidayDates = []

for x in range(0,len(holidayLines) ):
    # ... Get the date,first
    this = holidayLines[x].split(" ") # since we know they're formatted "YYYY/MM/DD Name of Holiday"
    rawdate = this[0]
    datechunks = rawdate.split("/") # separate out the YYYY,MM,and DD for use
    newdate = (datechunks[0],datechunks[1],datechunks[2])

    holidayDates.append(newdate)

    # ... then get the Name
    del this[0] # remove the dates from our split array 
    name = "".join(this)

    holidayNames.append(name)

所以在我们函数之前的块中,我:

  • 1:打开文件并存储每一行​​,然后关闭它。
  • 2:遍历每一行并分离出日期,并将元组存储在一个数组中。
  • 3:将名称保存到单独的数组中。

然后我们进行比较。

def CheckAllHolidays():
    returnNames = [] # a storage array for the names of each holiday
    returnDays = [] # a storage array for all the holidays that are expected in our response

    today = datetime.datetime.now()
    threeweeks = timedelta(weeks=3)
    for x in range(0,len(holidayDates) ):

        doi = holidayDates[x] # a touple containing the date of interest 
        year = doi[0]
        month = doi[1]
        day = doi[2]
        holiday = datetime.datetime(year,month,day)

        if holiday > today:
            # convert the holiday date to a date three weeks earlier using timedelta
            returnDays.append( holiday - threeweeks )
            returnNames.append( holidayNames[x] )
        else:
            pass # do nothing if date has passed
    return(returnDays,returnNames)

我在这里所做的是:

  • 1:在函数内创建一个数组来存储我们的假日名称。
  • 2:将上一个数组中的日期转换为 datetime.datetime() 对象。
  • 3:比较 if 块中的两个同类对象,以及
  • 4:返回每个假期前三周的日期列表,以及应设置提醒的假期名称。

那么你就准备好了。你可以打电话

ReminderDates = CheckAllHolidays()[0]
ReminderNames = CheckAllHolidays()[1]

然后使用这两个列表来创建您的提醒! ReminderDates 是一个填充了 datetime.datetime() 对象的数组,而 ReminderNames 是一个填充了字符串值的数组。

很抱歉我的回复有点长,但我真的希望我能够帮助您解决问题!节日快乐

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?