yibrother 发表于 2024-6-10 13:44

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

本帖最后由 yibrother 于 2024-6-10 17:04 编辑

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

如果有人说大家直接用在线表格来做,那么表格的列非常的多,如教育培训列,总共有17个空格需要填写,那就至少需要17列,显然大家上交的材料使用上图的类型比较好。


目的:将上述表格的内容按照列进行汇总,每一列对应的括号的所有的数据相加,得到最终需要的数据


步骤:第一步:按列提取括号内的数据(使用正则表达式RE);
第二步:将提取到的数据转成表格(dateframe);
第三步:将上述数据求和汇总,转成一个行(series);
第四步:将上述的行跟格式模板相对应,形成满足要求的格式文本




主要是使用PYTHON写的代码,主要是用的pandas和re模块


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 =
    cl_ls = [ "0.0" if len(item) == 0 else item for item in cl_ls]
    cl_ls =

    # 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 =
    result_dict = dict(zip(keys, values))
    text=result_dict
    # 使用 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=,index_col=None,sheet_name="Sheet1")

print(df.columns )

cls=["宣贯活动",      "教育培训",      "警示教育",      "专项行动",      "应急演练",      "行业活动",      "特色活动"]
huizong_string=""

for cl in cls:
    print(cl)
    ndf= df
    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)



















上述代码中把上述一到四步所有过程资料全部保存了本地问题,各位如果不需要执行过程,直接注释掉


最终的成果
第二步:
第三步:


第四步:


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


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

wooailein 发表于 2024-6-11 11:57

挺好的,不过其实流程还可以优化,用表格文档统计和沟通效率感觉都要低很多,用更方便的可视化工具统计会更好,当然,部门多,为了看起来工作繁忙的景象可能有时间比效率更受领导喜欢

vethenc 发表于 2024-6-10 23:10

兄弟,你这个表格就设置错了,让他们填表的时候就应该直接是数字,类似统计年报的那种表格。反正我是没见过这种表格,折腾自己。下达文件的目的是方便自己{:300_966:}

asd121ddw 发表于 2024-6-10 19:43

学习一下,不错的贴子

ZhjhJZ 发表于 2024-6-10 20:49

这是专业人士写的专门工具啊{:1_921:},一般人都是用个Excel表了

yibrother 发表于 2024-6-10 22:02

ZhjhJZ 发表于 2024-6-10 20:49
这是专业人士写的专门工具啊,一般人都是用个Excel表了

工作中属于这类的问题(文本中提取出来特定的值) 大家可以直接借用代码生成相关的成果

ChengSJ 发表于 2024-6-11 08:49

初看写的挺简洁的{:1_921:}

zf19871001 发表于 2024-6-11 08:59

总有一些部门会把你的格式改了 然后得挨个检查

HapplyLin 发表于 2024-6-11 17:18

真是技多不压身

royiiechan 发表于 2024-6-12 00:09

国网吗?
页: [1] 2
查看完整版本: 用PYTHON写的职场统计用的小工具,大家自行改进