首页 > 编程语言 >python实现自动计算排工期

python实现自动计算排工期

时间:2024-11-30 17:28:43浏览次数:8  
标签:end python start 工期 自动 date dict array workdays

3be70d7c0e52d4683c596416079b5e7f.jpeg

一、需求说明

如果大家涉及到项目管理的话,那么一定逃不掉规划工期。由于在规划工期的时候需要考虑将法定节假日和周六日进行去除,所以许多人都会打开日历,一天一天的去计算。这样效率即慢,同时也容易出现错误,那么如何快速实现工期的排定呢?

假设开发的过程和顺序如下(其他行业的当然也可以自行调整):

开发➡️测试➡️辅助测试➡️预上线测试➡️提审➡️上线

0609344212a412f9b499456357c8abbc.jpeg
二、需求分析

1.任务并行和串行情况

测试&UI跟测&产品跟测由于任务性质为并行,其他的都为串行

①UI跟测开始时间=测试开始时间

②产品跟测结束时间=测试结束时间

备注:所有的开始和结束时间都算作正常的工期内

2.工作日计算方式

需去除国家法定家假日和周六日

三、程序实现

1.运行环境

win10+pthon3.9.6+pycharm2020.1.1

2.三方库

①chinese_calendar:主要使用其is_workday判断指定日期是否为节假日【chinese_calendar为2024年11月30日导入的最新版本,后续若想使用最新的法定节假日,可自行更新版本】

②datetime:用于转化日期

③openpyxl:用于导出excel

3.实现步骤

3.1初始化开始时间和各阶段所需工期

kaifa_start_date = datetime.date(2024, 12, 2)#开发开始时间
kaifa_workdays = 12 #开发时间
ceshi_workdays = 8 #测试时间
uitest_workdays = 3 #UI跟测时间
pmtest_workdays = 3 #产品跟测时间
fuzhutest_workdays = 3 #辅助测试时间
yushangxiantest_workdays = 1 #预上线测试时间
tishen_workdays = 1 #提审时间
shangxian_workdays =1 #上线时间

3.2书写工具方法(主要是计算工作日加减)

#1.计算两个日期内的工作日天数
def count_workdays(start_date, end_date):
workdays = 0
current_date = start_date
while current_date <= end_date:
if is_workday(current_date):
workdays += 1
current_date += datetime.timedelta(days=1)
return workdays
#2.在当前日期的基础上,增加固定的工作日(不含周六日和法定节假日)
def add_workdays(start_date, workdays):
current_date = start_date
workdays -= 1
while workdays >0 :
current_date += datetime.timedelta(days = 1)
if is_workday(current_date):
workdays -= 1
return current_date
#3.在当前日期的基础上,减少固定的工作日(不含周六日和法定节假日)
def reduce_workdays(end_date, workdays):
current_date = end_date
while workdays > 0:
current_date -= datetime.timedelta(days = 1)
if is_workday(current_date):
workdays -= 1
return current_date

3.3计算和存储所有开发的时间

dict_array = []
#开发时间
kaifa_end_date = add_workdays(kaifa_start_date,kaifa_workdays)
dict_array.append({"阶段名称":"开发","开始时间":kaifa_start_date,"结束时间":kaifa_end_date,"当前状态":"进行中","工作日":kaifa_workdays})
#测试环境测试时间
ceshi_start_date = add_workdays(kaifa_end_date,2)
ceshi_end_date = add_workdays(ceshi_start_date,ceshi_workdays)
dict_array.append({"阶段名称":"测试环境测试","开始时间":ceshi_start_date,"结束时间":ceshi_end_date,"当前状态":"进行中","工作日":ceshi_workdays})
#UI跟测时间
ui_start_date = add_workdays(ceshi_start_date,1)
ui_end_date = add_workdays(ui_start_date,uitest_workdays)
dict_array.append({"阶段名称":"UI人员跟测","开始时间":ui_start_date,"结束时间":ui_end_date,"当前状态":"进行中","工作日":uitest_workdays})
#产品跟测时间
pm_end_date = ceshi_end_date
pm_start_date = reduce_workdays(ceshi_end_date,pmtest_workdays-1)
dict_array.append({"阶段名称":"产品人员跟测","开始时间":pm_start_date,"结束时间":pm_end_date,"当前状态":"进行中","工作日":pmtest_workdays})
#辅助测试时间
fuzhutest_start_date = add_workdays(ceshi_end_date,2)
fuzhutest_end_date = add_workdays(fuzhutest_start_date,fuzhutest_workdays)
dict_array.append({"阶段名称":"辅助测试","开始时间":fuzhutest_start_date,"结束时间":fuzhutest_end_date,"当前状态":"进行中","工作日":fuzhutest_workdays})
#预上线测试时间
yushangxiantest_start_date = add_workdays(fuzhutest_end_date,2)
yushangxiantest_end_date = add_workdays(yushangxiantest_start_date,yushangxiantest_workdays)
dict_array.append({"阶段名称":"准线上环境测试","开始时间":yushangxiantest_start_date,"结束时间":yushangxiantest_end_date,"当前状态":"进行中","工作日":yushangxiantest_workdays})
#提审时间
tishen_start_date = add_workdays(yushangxiantest_end_date,2)
tishen_end_date = add_workdays(tishen_start_date,tishen_workdays)
dict_array.append({"阶段名称":"提审","开始时间":tishen_start_date,"结束时间":tishen_end_date,"当前状态":"进行中","工作日":tishen_workdays})
#上线时间
shangxian_start_date = add_workdays(tishen_end_date,2)
shangxian_end_date = add_workdays(shangxian_start_date,shangxian_workdays)
dict_array.append({"阶段名称":"上线","开始时间":shangxian_start_date,"结束时间":shangxian_end_date,"当前状态":"进行中","工作日":shangxian_workdays})

3.4将所有的数据导出到excel

wb = Workbook()
ws = wb.active
ws.title = "Date Sheet"
ws.append(["阶段名称", "开始时间", "结束时间", "当前状态", "工作日"])
index = 0
while index < len(dict_array):
ws[f'A{index+2}'] = dict_array[index].get("阶段名称")
ws[f'B{index+2}'] = dict_array[index].get("开始时间")
ws[f'C{index+2}'] = dict_array[index].get("结束时间")
ws[f'D{index+2}'] = dict_array[index].get("当前状态")
ws[f'E{index+2}'] = dict_array[index].get("工作日")
# print(dict_array[index])
index += 1
# 保存工作簿
wb.save("工期.xlsx")

四、程序运行

后续每次只需要修改3.1初始化开始时间和各阶段所需工期参数,然后运行即可,将工期.xlsx文件拷贝出去即可,希望能够帮助到大家。

92ab24fd608466abd05e2a60801fbeff.jpeg

标签:end,python,start,工期,自动,date,dict,array,workdays
From: https://blog.csdn.net/u014172743/article/details/144157724

相关文章

  • Micropython machine库简介
        Micropython是一种精简高效的Python实现,专门为微控制器和嵌入式系统设计。在Micropython中,machine库是一个非常重要的库,它提供了对微控制器硬件的底层访问和控制功能。本文将详细介绍Micropython的machine库,包括其功能、用法和示例程序。一、machine库概述  ......
  • python毕设 社区食堂管理系统程序+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景关于社区食堂管理系统的研究,现有研究多集中在食堂的运营模式和政策扶持方面1,专门针对利用Python开发社区食堂管理系统的研究较少。在......
  • python爬虫爬取快手视频代码X
    importrequestsurl=‘https://v1.kwaicdn.com/ksc2/ZQM_5o3dhwFVbma3ycmX0AIh_ZjyDzd8KYMBRMwnr2Jqw4sxaoLuMZa_4RPJcdoB3Egu0YUWV-6ONSURUlQzg0HNTTuyMqQ3iGb16wPRx7rTjiK7ynGJAKNpe8QhOjpoWvYptXgZBS3vbQ9VVdDABZn_l7TkcacsyEJzuKVHgl2ctKXIpmi7yF-NZWIhVzBq.mp4?pkey=A......
  • python语言语音识别程序代码
    importspeech_recognitionassrr=sr.Recognizer()#调用识别器test=sr.AudioFile(“英文测试.wav”)#导入语音文件withtestassource:audio=r.record(source)type(audio)c=r.recognize_sphinx(audio,language=‘en-US’)#英文识别输出print(“识别结果:......
  • 第一篇 Python字典
    1.前言字典是另一种可变容器模型,且可存储任意类型对象。字典的每个键值 key:value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中,格式如下所示:d={key1:value1,key2:value2}注意:dict 作为Python的关键字和内置函数,变量名不建......
  • Java 开发者的 Python 快速入门指南
    目录语法基础差异变量声明和类型面向对象编程函数声明与调用继承与多态集合操作特殊方法与装饰器异常处理Python特有特性快速入门建议1.语法基础差异代码块定义Java:publicclassExample{publicvoidmethod(){if(condition){/......
  • 将VB录制的word代码转换成python操作
    将VB录制的word代码转换成python操作一、VB录制当我们在Word文档中录制了宏代码的时候,怎样打开并查看宏代码的内容呢1、宏的简单使用https://jingyan.baidu.com/article/6181c3e06db904542ff15308.html打开录制了宏代码的Word文档,点击文档编辑区域上方。单击“视图”......
  • 大模型AIGC培训讲师人工智能培训讲师叶梓Python深度学习与AIGC培训提纲
    【课程时长】8天(6小时/天)【课程简介】随着AIGC(基于AI的内容生成)技术的崛起,以ChatGPT为代表的人工智能技术正引领全球科技潮流。为了帮助学员更好地理解和应用这一技术,特推出了本课程。本课程从基础开始,深入浅出地讲解Python数据分析、机器学习等核心概念,以及各种常用经典算......
  • 微信消息塞爆?自动回复功能让你轻松应对!
    在商业竞争日趋白热化的今天,客户信息成百上千纷至沓来的时候。我们常常会显得应接不暇。这时,一款多微管理系统的出现给我们带来了极大的便利。 首先,登录你的微信号。如果此时你拥有20甚至是30个微信号时,告诉你,这款系统它能支持同时登录多个账号,完全无需担心会受到数量的......
  • Python 网络爬虫的高级应用:反爬绕过与爬取多样化数据
    经过前三天的学习,我们已经掌握了分布式爬虫和大规模数据处理的基本技术。本篇博客将进一步探讨更复杂的网络爬虫技术,包括反爬绕过策略的深入应用、多样化数据爬取(如图片、视频和表单数据),以及如何爬取API数据并结合爬虫应用于实际场景。一、反爬绕过的高级技术1.动态请求......