qq_26007951 2023-02-20 17:37 采纳率: 80%
浏览 196
已结题

谁帮我用python解析一下pdf,并提取里面的数据以excel的形式保存!pdf公布有一定的规律。

谁帮我用python解析一下pdf,并提取里面的数据以excel的形式保存!pdf公布有一定的规律。
思路是:
我现在有一个文件里面,都是这样类似的pdf,披露的格式大体是这样,现在我想要遍历这个文件夹,挨个去解析每一个pdf,然后解析这个pdf,获取下面的比例数值,然后以excel的形式保存。
可以用1-2家pdf举例来实现这个代码,然后执行能实现我想要的结果就行,这样我就能遍历其他的pdf了。

提供几个pdf案例(下载到本地,需要注意的是,有些议案不披露中小股东表决情况,这种就算空!):

    http://static.cninfo.com.cn/finalpage/2022-02-12/1212351041.PDF
    http://static.cninfo.com.cn/finalpage/2022-04-30/1213258311.PDF
    http://static.cninfo.com.cn/finalpage/2022-04-30/1213257243.PDF

img

img

img

  • 写回答

9条回答 默认 最新

  • 阳光宅男xxb 2023-02-21 12:31
    关注

    您好,关于您提出的使用python提出pdf中的指定数据信息,已经为您写好了程序。
    最后的效果:

    img

    核心代码:

    
    partern_total = r'[0-9]+\.[0-9]*|-?[0-9]+%'
                result_total = re.findall(partern_total,text_total_find)
                total = 0
                if result_total:
                    total = result_total[0]
    
                partern_detail = r'[、\s{0,2}|(.*?)]*[逐项]*(审议[并]{0,1}通过[了]{0,1}.*?)\n'
                result_detail = re.findall(partern_detail, text_detail_find)
    
                if result_detail:
                    for i in range(len(result_detail)):
                        dict_data = {}
                        text_detail_find = text_detail_find[text_detail_find.find(result_detail[i]):]
                        #修正标题
                        if "《" in result_detail[i] and '》' not in result_detail[i]:
                            result_detail[i] = text_detail_find[0:text_detail_find.find('》')+1]
                            result_detail[i] = re.sub('\n','',result_detail[i])
    
                        title = result_detail[i]#议案标题
    
                        dict_data['议案'] = title
                        dict_data['出席股东表决权占比'] = total
                        if i!=(len(result_detail)-1):
                            current_text = text_detail_find[0:text_detail_find.find(result_detail[i+1])]
                        else:
                            current_text = text_detail_find
    
                        result_data = re.findall('(同意|反\n?对|弃\n?权).*?([0-9]+\.[0-9]*|-?[0-9]+)[%|%]',current_text,re.S)
    
                        if (len(result_data)!=3 and len(result_data)!=6) or not re.findall('反\n?对',current_text):
                            continue
    
                        dict_data['总体表决情况:同意占比'] = result_data[0][1]
                        dict_data['总体表决情况:反对占比'] = result_data[1][1]
                        dict_data['总体表决情况:弃权占比'] = result_data[2][1]
    
                        if len(result_data)==6:
                            dict_data['中小股东表决情况:同意占比'] = result_data[3][1]
                            dict_data['中小股东情况:反对占比'] = result_data[4][1]
                            dict_data['中小股东情况:弃权占比'] = result_data[5][1]
                        else:
                            dict_data['中小股东表决情况:同意占比'] = '0.00'
                            dict_data['中小股东情况:反对占比'] = '0.00'
                            dict_data['中小股东情况:弃权占比'] = '0.00'
                        # print(dict_data)
                        pddata = pd.DataFrame(dict_data,index=[0])
                        all_data = pd.concat([all_data,pddata],ignore_index=True)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(8条)

报告相同问题?

问题事件

  • 系统已结题 3月1日
  • 已采纳回答 2月21日
  • 赞助了问题酬金15元 2月21日
  • 赞助了问题酬金15元 2月21日
  • 展开全部

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度