Python 在字段中截取特定括号部分的字段,并且分类统计

自学了一段时间python,对象这一块看的有点懵,不过大部分逻辑思路,语法什么的都理解了,可以尝试着对工作上的需求进行一个有效的简化工作。
之前在工作中遇到了一个维护需求,就是要统计发文的部门,在这一季度上发了多少文章,这种每次都人工核对实在太麻烦了,所以可以尝试用程序搞定


文章列表的格式比较统一,我的思路将当季的文章拉到文本上,程序截取括号部分的部门名,再统计筛选,这样比较简单
(因为数量不多,而且涉及到接口部分没有直接从页面抓取,网页做了反扒,萌新搞不定)
在这里插入图片描述

复制页面列表到文本里面,待处理,名字随便改的,不过到时候跟代码要对应

import datetime #时间库
now_time = datetime.datetime.now().strftime('%Y%m%d') 

f = open('基层动态发布.txt', encoding='utf-8')
data = f.read()  #读文件
#print(data)
f.close() #关闭文件

import re
m = re.findall(r"[【](.*?)[】]", data)
str=[]
for i in m:
    a=i.split('、') #、号切开生成新的数组
    str.extend(a) #数组加起来
#if m:
 #   print ('%s\n' % (str))
#else:
 #   print ('not match')
count='本季度更新总数%d : \n' % (len(str))
print(count)

for i in str: 
    n=0
    for j in str:
        n+=1 
        b = re.findall(r"\S%s" % i, j)  #匹配查找有没有重复的长称呼,例如佛山禅城办/禅城办
        if b:
            str[n-1]=i  #匹配到就替换字符串,因为数列是从0开始算要减一

#保存为表格
import csv  #表格读写库
title = ['部门','发布量']
fcv = open('基层表格%s.csv' % (now_time) , 'w', newline='')
f_wt = csv.writer(fcv)
f_wt.writerow(title)


results = []
myset = set(str)  #myset是另外一个列表,里面的内容是str里面的无重复项
for item in myset:
    result="%s : %s \n" %(item,str.count(item))
    print(result)
    results.append(result)
    f_wt.writerow([item , str.count(item)]) #写入表格内
    
f_wt.writerow([len(myset) , len(str)]) #写入表格内

output = open('基层动态统计结果%s.txt' % (now_time) ,'w', encoding='gbk')
output.writelines(count)
output.writelines(results) #用writelines方法将结果数组添加到新文本上
output.close()

#运行后生成表格和文本两个版本文件

fcv.close()
input('输入任意字符结束程序:') #阻止程序强退


先将必要的库导进来,打开刚刚存储的文档分析
括号部分有的是有多个部门名的,这个也需要截取处理,另外一些名字有简写和长名有重复部分的也做了合并处理
只是如果这个简写跟长名没有重复部分,可能会合并不到,这个如果进一步处理只能自己加一段筛选条件,感觉作用不大
因为要打包成小软件存放,所以最后加了个防止强制退出的一个输入键

功能修改了几次,还算满意,但是新手写的感觉代码有点繁琐,如果有更好的方法欢迎讨论(_)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值