目录
问题描述:获取星期几在指定年份的所有日期
- 新手作品,新学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官方文档,只找到几个能用能看懂的类和方法,希望路过的大佬给个其他比较方便的方式。
- 感觉写的有点臃肿,以后学会更简洁的方式再更新。