介绍
在这个项目中,你将学习如何为一个新的项目团队创建每周报告模板。每周报告用于总结项目团队的日常工作,以便定期进行审查。
👀 预览
## 示例
## start_date = datetime.date(2023,10,1) 星期日
## end_date = datetime.date(2023,10,16) 星期一
$ ls weekly
2023-10-06.txt 2023-10-13.txt 2023-10-16.txt
$ cat 2023-10-06.txt
2023-10-02
2023-10-03
2023-10-04
2023-10-05
2023-10-06
$ cat 2023-10-16.txt
2023-10-16
🎯 任务
在这个项目中,你将学习:
- 如何创建一个“weekly”文件夹来存储每周报告模板文件
- 如何确定包含开始日期的那一周的星期五
- 如何在“weekly”文件夹中编写每周报告模板文件
- 如果结束日期是星期六或星期日,如何将其调整到前一个星期五
- 如何为项目的最后一周创建最终的每周报告模板文件
🏆 成果
完成这个项目后,你将能够:
- 根据项目开始和结束日期自动生成每周报告模板
- 确保每周报告模板只包含工作日,不包括周末
- 如果结束日期是周末,将其调整到前一个星期五
- 为存储每周报告模板创建一个一致且有组织的结构
创建“weekly”文件夹
在这一步中,你将学习如何创建“weekly”文件夹来存储每周报告模板文件。
- 在你的代码编辑器中打开
report.py文件。 - 在代码中找到
create函数。 - 在
create函数内部,添加以下代码来创建“weekly”文件夹:
import os
def create(start_date, end_date):
## 创建“weekly”文件夹
os.makedirs("weekly", exist_ok=True)
## 其余代码...
os.makedirs("weekly", exist_ok=True) 这一行在与 report.py 文件相同的目录中创建“weekly”文件夹。exist_ok=True 参数确保即使文件夹已经存在也会创建它,从而避免错误。
确定开始日期所在周的星期五
在这一步中,你将学习如何找到包含开始日期的那一周的星期五。
- 在
create函数中,在创建文件夹的代码之后添加以下代码:
import datetime
def create(start_date, end_date):
## 创建“weekly”文件夹
os.makedirs("weekly", exist_ok=True)
## 找到包含开始日期的那一周的星期五
current_date = start_date
while current_date.weekday()!= 4: ## 4 代表星期五
current_date += datetime.timedelta(days=1)
## 其余代码...
这段代码使用一个 while 循环,从开始日期开始遍历每一天,直到当前日期是星期五(星期几为 4)。这确保了 current_date 变量被设置为包含开始日期的那一周的星期五。
编写每周报告模板文件
在这一步中,你将学习如何在“weekly”文件夹中编写每周报告模板文件。
- 在
create函数中,在找到开始日期所在周的星期五之后添加以下代码:
def create(start_date, end_date):
## 创建“weekly”文件夹
os.makedirs("weekly", exist_ok=True)
## 找到包含开始日期的那一周的星期五
current_date = start_date
while current_date.weekday()!= 4: ## 4 代表星期五
current_date += datetime.timedelta(days=1)
## 从开始日期所在周的星期五开始遍历日期范围
while current_date <= end_date:
## 构建文件名
file_name = current_date.strftime("%Y-%m-%d") + ".txt"
file_path = os.path.join("weekly", file_name)
## 写入文件内容
with open(file_path, "w") as file:
## 写入从开始日期到当前星期五的工作日范围(不包括周末)
date = max(
start_date, current_date - datetime.timedelta(days=6)
) ## 确保开始日期不早于当前星期五的前一周
while date <= current_date:
if date.weekday() < 5: ## 0 代表星期一,4 代表星期五
file.write(date.strftime("%Y-%m-%d") + "\n")
date += datetime.timedelta(days=1)
## 将当前星期五更新为下一个星期五
current_date += datetime.timedelta(days=7)
## 其余代码...
这段代码使用一个 while 循环,从开始日期所在周的星期五开始遍历日期范围,直到结束日期。对于每个星期五,它在“weekly”文件夹中创建一个每周报告模板文件,文件名是该星期五的日期。
在每个文件中,代码写入从开始日期(或者当前星期五的前一周,以较晚的为准)到当前星期五的工作日范围,不包括周末。
如有必要,将结束日期调整为上一个星期五
在这一步中,你将学习如何在结束日期是星期六或星期日时,将其调整为前一个星期五。
- 在
create函数中,在写入每周报告模板文件的循环之后添加以下代码:
def create(start_date, end_date):
## 创建“weekly”文件夹
os.makedirs("weekly", exist_ok=True)
## 找到包含开始日期的那一周的星期五
#...(前面的步骤)
## 从开始日期所在周的星期五开始遍历日期范围
#...(前面的步骤)
## 如果结束日期是星期六或星期日,将其调整为前一个星期五
if end_date.weekday() == 5: ## 5 代表星期六
end_date -= datetime.timedelta(days=1)
elif end_date.weekday() == 6: ## 6 代表星期日
end_date -= datetime.timedelta(days=2)
## 其余代码...
这段代码检查结束日期是否是星期六(星期几为 5)或星期日(星期几为 6)。如果是,它分别通过减去 1 天或 2 天,将结束日期调整为前一个星期五。
这确保了最后一周的每周报告模板只包含从星期一到调整后的结束日期的工作日,不包括周末。
创建最终的每周报告模板文件
在这一步中,你将学习如何从包含调整后结束日期的那一周的星期一开始,创建最后一周的每周报告模板文件。
- 在
create函数中,在调整结束日期之后添加以下代码:
def create(start_date, end_date):
## 创建“weekly”文件夹
os.makedirs("weekly", exist_ok=True)
## 找到包含开始日期的那一周的星期五
#...(前面的步骤)
## 从开始日期所在周的星期五开始遍历日期范围
#...(前面的步骤)
## 如果结束日期是星期六或星期日,将其调整为前一个星期五
#...(前面的步骤)
## 创建从星期一到调整后结束日期的那一周的报告提交
## 找到包含调整后结束日期的那一周的星期一
current_date = end_date
## 构建文件名
file_name = current_date.strftime("%Y-%m-%d") + ".txt"
file_path = os.path.join("weekly", file_name)
while current_date.weekday()!= 0: ## 0 代表星期一
current_date -= datetime.timedelta(days=1)
## 写入文件内容
with open(file_path, "w") as file:
## 写入从星期一到调整后结束日期的工作日范围(不包括周末)
date = current_date
while date <= end_date:
if date.weekday() < 5: ## 0 代表星期一,4 代表星期五
file.write(date.strftime("%Y-%m-%d") + "\n")
date += datetime.timedelta(days=1)
这段代码首先找到包含调整后结束日期的那一周的星期一。然后它构建最后一周的每周报告模板的文件名,并打开文件进行写入。
在文件内部,代码写入从星期一到调整后结束日期的工作日范围,不包括周末。
这确保了最后一周的每周报告模板文件只包含从包含调整后结束日期的那一周的星期一开始到调整后结束日期本身的工作日。
通过上述步骤,你已经完成了 report.py 文件中 create 函数的实现,该函数根据提供的开始和结束日期生成每周报告模板。
- 要生成每周报告模板,在终端中使用
python report.py命令运行report.py脚本。该脚本将根据提供的开始和结束日期创建每周报告模板。
下面提供了一些示例:
## 示例 1
## start_date = datetime.date(2023,10,1) 星期日
## end_date = datetime.date(2023,10,16) 星期一
$ ls weekly
2023-10-06.txt 2023-10-13.txt 2023-10-16.txt
$ cat 2023-10-06.txt
2023-10-02
2023-10-03
2023-10-04
2023-10-05
2023-10-06
$ cat 2023-10-16.txt
2023-10-16
## 示例 2
## start_date = datetime.date(2023,9,10) 星期日
## end_date = datetime.date(2023,9,24) 星期日
$ ls weekly
2023-09-15.txt 2023-09-22.txt
$ cat 2023-09-15.txt
2023-09-11
2023-09-12
2023-09-13
2023-09-14
2023-09-15
$ cat 2023-09-22.txt
2023-09-18
2023-09-19
2023-09-20
2023-09-21
2023-09-22
总结
恭喜你!你已经完成了这个项目。你可以在 LabEx 中练习更多实验来提升你的技能。



