好友
阅读权限10
听众
最后登录1970-1-1
|
本帖最后由 yibrother 于 2024-6-10 17:04 编辑
背景:打工人现在天天搞统计,本人面对的部门单位非常多,每一次安全生产统计的内容超级多,由于上交的材料都是模板统一的独立的内容,因此需要汇总,如安全生产月活动,类似下面的表
如果有人说大家直接用在线表格来做,那么表格的列非常的多,如教育培训列,总共有17个空格需要填写,那就至少需要17列,显然大家上交的材料使用上图的类型比较好。
目的:将上述表格的内容按照列进行汇总,每一列对应的括号的所有的数据相加,得到最终需要的数据
步骤:第一步:按列提取括号内的数据(使用正则表达式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)
上述代码中把上述一到四步所有过程资料全部保存了本地问题,各位如果不需要执行过程,直接注释掉
最终的成果
第二步:
第三步:
第四步:
过程文件对比:如果不要处理过程,只需要一个汇总的txy文本文件,过程只是帮助大家理解的
全文到此结束,本文主要是给大家提供思路,需要一定的编程基础,虽然我提供的办法不是最简单的办法,但是目前我能想到的提高效率的思路就这样了,打工人不易,各位如有更好的思路,欢迎交流提升
|
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|