用PYTHON写的职场统计用的小工具,大家自行改进

查看 42|回复 2
作者:yibrother   
背景:打工人现在天天搞统计,本人面对的部门单位非常多,每一次安全生产统计的内容超级多,由于上交的材料都是模板统一的独立的内容,因此需要汇总,如安全生产月活动,类似下面的表


问题背景,收集各个部门和单位的数据.jpg (384.41 KB, 下载次数: 0)
下载附件
2024-6-10 13:26 上传

如果有人说大家直接用在线表格来做,那么表格的列非常的多,如教育培训列,总共有17个空格需要填写,那就至少需要17列,显然大家上交的材料使用上图的类型比较好。
目的:将上述表格的内容按照列进行汇总,每一列对应的括号的所有的数据相加,得到最终需要的数据
步骤:
[color=]第一步:按列提取括号内的数据(使用正则表达式RE);

第二步:将提取到的数据转成表格(dateframe);
第三步:将上述数据求和汇总,转成一个行(series);
第四步:将上述的行跟格式模板相对应,形成满足要求的格式文本
主要是使用PYTHON写的代码,主要是用的pandas和re模块
[Python] 纯文本查看 复制代码import re
import pandas as pd
def kuohao_to_list(st="组织观看警示教育片( 1)场,参与( 4)人次"):
    st=st.replace(" ","")
    pattern = r"\((.*?)\)"
    ls = re.findall(pattern, st)
    cl_ls = [text.replace(" ", "") for text in ls]
    cl_ls = [ "0.0" if len(item) == 0 else item for item in cl_ls]
    cl_ls = [float(item) for item in cl_ls if item]
    # print(len(ls))
    # print(cl_ls)
    return cl_ls
def list_to_text(leixing,list_values):
    # 宣贯活动
    st0 = '''
    1.组织开展宣讲活动({})场,参与({})人次;
    2.组织专题研讨({})场、集中宣讲({})场、辅导报告({})次,累计参与({})人次;
    3.主要负责人讲授安全公开课({})场,参与({})人次。
    '''
    #教育培训
    st1='''
    1.开展宣教培训活动({})场,参与({})人次;
    2.组织安全培训({})场,参与({})人次;
    4.张贴或悬挂安全标语、横幅、挂图等({})份;
    5.组织安全知识答题竞答活动({})场,参与({})人次;
    6.组织开展“安全宣传咨询日”现场活动({})场、参与({})人次,网络直播({})场、({})人观看;
    7.开展安全生产“大家谈”“班前会”“等活动({})场,参与({})人次;
    8.组织“畅通生命通道”活动({})场,参与({})人次;
    9.二十项反措和施工反措宣贯({})次,参与({})人次。
    '''
    #警示教育
    st2='''
    1.组织观看警示教育片({})场,参与({})人次;
    2.举办警示教育展({})场,研讨分析会({})次,累计参与({})人次。
    '''
    #专项行动
    st3='''
    1.企业主要负责人带头开展隐患排查整治({})次,发现问题({})项,已完成整改({})项;
    2.开展“四不两直”({})次,曝光重大隐患和突出问题({})个;
    3.全员安全隐患大家拍({})人次,发现安全隐患({})个;
    4.消防专项检查({})次,发现问题({})项,已完成整改({})项。
    '''
    #应急演练
    st4='''
    1.组织应急与安全培训({})场,参与({})人次;
    2.开展从业人员自救互救技能培训({})场,参与({})人次;
    3.组织应急演练({})次,参与({})人次,宣传报道({})条;
    4.企业主要负责人带头参加安全应急演练({})次,总参与({})人次。
    '''
    #行业活动
    st5='''
    1.参与“避险逃生训练营”短视频新媒体展播({})个;
    2.参与“人人讲安全个个会应急”网络知识竞赛({})人,答题({})人次;
    3.2024年“安全生产月”学习行动({})人次,取得证书({})个;
    4.向主流媒体投稿({})件,刊登({})件,获奖({})次。
    '''
    #特色活动
    st6='''
    活动名称({}),组织({})场/次,参与({})人次。
    '''
    keys  = ["宣贯活动", "教育培训", "警示教育", "专项行动", "应急演练", "行业活动", "特色活动"]
    values = [st0, st1, st2, st3, st4, st5, st6]
    result_dict = dict(zip(keys, values))
    text=result_dict[leixing]
    # 使用 str.format 方法
    filled_text = text.format(*list_values)
    # print(filled_text)
    return filled_text
excel_file_path = '汇总.xlsx'
# 创建新的 DataFrame 存储匹配结果
sum_df = pd.DataFrame()
huizong_df = pd.DataFrame()
# 读取整个 Excel 文件
df = pd.read_excel(excel_file_path,header=[0],index_col=None,sheet_name="Sheet1")
print(df.columns )
cls=["宣贯活动",        "教育培训",        "警示教育",        "专项行动",        "应急演练",        "行业活动",        "特色活动"]
huizong_string=""
for cl in cls:
    print(cl)
    ndf= df[cl]
    ls= ndf.apply(kuohao_to_list) #获取括号的内容并转换成list
    ls_list = ls.tolist()
    sum_df = pd.DataFrame(ls_list)
    sums=sum_df.sum()  #求和每一列
    sums.name = cl  # 为新行设置一个名称
    string_text = list_to_text(cl, sums)
    string_text=string_text.replace(".0","")
    print(string_text)
    huizong_string +=string_text
    huizong_df = huizong_df._append(sums)
    sum_df.to_excel(cl+'.xlsx', index=True)
huizong_df.to_excel('汇总1.xlsx', index=True)
with open("信息统计.txt","w",encoding='utf-8') as f:
    f.write(huizong_string)  
上述代码中把上述一到四步所有过程资料全部保存了本地问题,各位如果不需要执行过程,直接注释掉
最终的成果
第二步:


单列拆分汇总.jpg (215 KB, 下载次数: 0)
下载附件
2024-6-10 13:39 上传

第三步:


汇总的部分.jpg (59.17 KB, 下载次数: 0)
下载附件
2024-6-10 13:39 上传

第四步:


汇总的txt.jpg (235.43 KB, 下载次数: 0)
下载附件
2024-6-10 13:39 上传

过程文件对比:如果不要处理过程,只需要一个汇总的txy文本文件,过程只是帮助大家理解的


前后文本.jpg (70.67 KB, 下载次数: 0)
下载附件
2024-6-10 13:40 上传

全文到此结束,本文主要是给大家提供思路,需要一定的编程基础,虽然我提供的办法不是最简单的办法,但是目前我能想到的提高效率的思路就这样了,打工人不易,各位如有更好的思路,欢迎交流提升

宋体, 微软

asd121ddw   

学习一下,不错的贴子
ZhjhJZ   

这是专业人士写的专门工具啊,一般人都是用个Excel表了
您需要登录后才可以回帖 登录 | 立即注册

返回顶部