提取财报表格

  1. 我提取的时网易2019年第二季度财报,pdf第14页的内容,pdf的网盘链接如下:链接: https://pan.baidu.com/s/1hXJGB8pl9jaJQ7hfzK7bWw 提取码: 7yc3
    主要有两点需要说明:
    1、使用pdfplumber提取单个表格时采用page.extract_page()和
    使用pdfplumber提取多个表格时采用page.extract_pages()区别在于
    假设每个表格只有三行,提取多个表时按照两个表计算
    前者输出的列表[[第一行],[第二行],[第三行]]
    后者输出的列表[[[第一行],[第二行],[第三行]],[[第一行],[第二行],[第三行]]]
    大家发现了什么区别了吗?你循环遍历前者时,会输出每一行表格里的内容;你遍历后者时,会输出每一个表的内容,不要乱用!!!
    2、输出提取的表格时,有时会出现空行,此时想把它删除掉该怎么办呢? 有时这一空行在列表中表示:[’’,’’,’’] ,都是空字符串;有时这一空行在列表中表示:[None,None,None] ,都是空值;有时这一空行在列表中表示:[’’,None,None] ,既有空字符串又有空值(此时按照出现的None来计算),所以很恶心,具体解决办法就是 你查看一下自己想提取的表格里 到底是出现哪种情况,然后再解决。
    上代码,有兴趣的小伙伴可以操作一下
import PyPDF2
import pdfplumber
from openpyxl import Workbook
workbook=Workbook()#新建工作簿
sheet=workbook.active#激活工作表
sheet.title='No13data'#
workbook.create_sheet('No14data')
sheet1=workbook['No14data']
with pdfplumber.open('C:\\Users\\Administrator\\Desktop\\网易2019第二季度财报.pdf') as pdf:
    # table_page=pdf.pages[12] #打开pdf第13页
    # table = table_page.extract_table(  # 提取单个表格
    #     table_settings={  # 提取表格时的设定
    #         "vertical_strategy": "text",
    #         "horizontal_strategy": "text"
    #     }
    # )
    # for row in table:
    #     if not (''.join([str(item) for item in row]))=='': #列表推导式 把每一行数据搞成一个字符串 保证非空值时进行下一步操作
    #         if not (''.join([str(item) for item in row])) == 'NoneNoneNoneNone':
    #             new_row = []
    #             new_row.append(''.join([str(item) if item else '' for item in row[0:3]]))  # 对于每一行前3个数据 如果非空 搞成一个字符串
    #             new_row += row[3:]  # 把每一行 后几个数据加进列表里
    #             sheet.append(new_row)

    table_page = pdf.pages[13]  # 打开pdf第14页
    table = table_page.extract_table(  # 提取单个表格
        table_settings={  # 提取表格时的设定
            "vertical_strategy": "text",
            "horizontal_strategy": "text"
        }
    )
    print(table)
    for row in table:
        if not (''.join([str(item) for item in row])) == ('NoneNoneNone'):  # 列表推导式 把每一行数据搞成一个字符串 保证非空值时进行下一步操作
            if not (''.join([str(item) for item in row])) == ('NoneNoneNoneNoneNoneNoneNoneNone'):
                new_row = []
                new_row.append(''.join([str(item) if item else '' for item in row[0:5]]))  # 对于每一行前2个数据 如果非空 搞成一个字符串
                # new_row += row[5:]  # 把每一行 后几个数据加进列表里
                for item in row[5:]:
                    if not item == None:
                        new_row.append(item)
                sheet1.append(new_row)

    workbook.save(filename='C:\\Users\\Administrator\\Desktop\\网易2019第二季度财报.xlsx')
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值