【Python笔记】获取星期几在指定年份的所有日期

问题描述:获取星期几在指定年份的所有日期

  • 新手作品,新学python,希望路过的大佬能给点意见,谢谢!
  • 实现功能:指定年份year、指定星期几week,获取week在year中所有的日期,比如获取2018年所有周一的日期。
  • 更新:日期:2019/06/04,版本:version1.0

1. 大致思路

Step1:获取指定年份中的所有日期,返回一个二维列表;
Step2:根据Step1返回的二维列表,筛选出指定周几的日期,返回一个列表;
Step3:将筛出的日期写入到文件中。

2. 源码

import calendar
import datetime
import csv

def getAllDayList(year):
    '''获取指定年份的所有日期,返回一个二维列表'''
    cal = calendar.Calendar()
    alldaylist = []
    for month in list(range(1,13)):
        listday = []
		#调用calendar类的itermonthdays()方法,返回一个迭代器,含有指定年月的日子
        for day in cal.itermonthdays(year,month):
			#过滤迭代器中用于填充首尾的0
            if day != 0:
                listday.append(day)
        alldaylist.append(listday)
    return alldaylist

def getdaydate(year,alldaylist,zj):
    '''获取指定周几的所有日期'''
    filterdate = []
    for month in list(range(1,13)):
        for day in alldaylist[month - 1]:
            date = datetime.date(year,month,day)
			#调用datetime类的isoweekday()方法,过滤出指定周几的日期
            if date.isoweekday() == zj:
                tmpstr = str(date.year) + "," + str(date.month) + "," + str(date.day)
                filterdate.append(tmpstr)
    return filterdate

def writeintocsv(filterdate):
    '''将筛出的日期写入csv文件'''
    tmp = []
    with open("HuoQuRiQi.csv",'w',newline='') as f:
        opw = csv.writer(f,delimiter=",")
        for i in filterdate:
            tmp = i.split(',')
            opw.writerow(tmp)

def writeintotxt(filterdate):
    '''将筛出的日期写入txt文件'''
    with open("HuoQuRiQi.txt",'w') as f:
        for i in filterdate:
            f.write(i+"\n")

if __name__ == '__main__':
    year = int(input("年份(四位数字):"))
    zhouji = int(input("周几(填数字1到7)?"))
    zjdate = getdaydate(year,getAllDayList(year),zhouji)
    writeintocsv(zjdate)
    writeintotxt(zjdate)

2.1 获取所有日期函数getAllDayDate()

主要功能为使用datetime类生成一个包含指定年份所有日期的列表;
datetime类的itermonthdays()方法会在月的首尾空白的地方填充“0”,需要过滤掉。

def getAllDayList(year):
    '''获取指定年份的所有日期,返回一个二维列表'''
    cal = calendar.Calendar()
    alldaylist = []
    for month in list(range(1,13)):
        listday = []
		#调用calendar类的itermonthdays()方法,返回一个迭代器,含有指定年月的日子
        for day in cal.itermonthdays(year,month):
			#过滤迭代器中用于填充首尾的0
            if day != 0:
                listday.append(day)
        alldaylist.append(listday)
    return alldaylist

2.2 获取指定周几的所有日期函数getdaydate()

主要功能为从所有日期中筛选出指定星期几的日期;
关键是datetime类的isoweekday()方法。

def getdaydate(year,alldaylist,zj):
    '''获取指定周几的所有日期'''
    filterdate = []
    for month in list(range(1,13)):
        for day in alldaylist[month - 1]:
            date = datetime.date(year,month,day)
			#调用datetime类的isoweekday()方法,过滤出指定周几的日期
            if date.isoweekday() == zj:
                tmpstr = str(date.year) + "," + str(date.month) + "," + str(date.day)
                filterdate.append(tmpstr)
    return filterdate

2.3 写入csv文件和txt文件的函数writeintocsv()和writeintotxt()

写csv文件,方便用excel查看。

def writeintocsv(filterdate):
    '''将筛出的日期写入csv文件'''
    tmp = []
    with open("HuoQuRiQi.csv",'w',newline='') as f:
        opw = csv.writer(f,delimiter=",")
        for i in filterdate:
            tmp = i.split(',')
            opw.writerow(tmp)

顺手写进txt文件,暂时没想到有什么用。

def writeintotxt(filterdate):
    '''将筛出的日期写入txt文件'''
    with open("HuoQuRiQi.txt",'w') as f:
        for i in filterdate:
            f.write(i+"\n")

3. 其它

  • 英语水平有限,看了几遍Python官方文档,只找到几个能用能看懂的类和方法,希望路过的大佬给个其他比较方便的方式。
  • 感觉写的有点臃肿,以后学会更简洁的方式再更新。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值