【办公自动化】使用Python一键提取PDF中的表格到Excel( 二 )


“保利地产年报”第四页如图所示 , 读取的结果存到列表`table` , 显示如下:
#观察读取出来的表格的数据结构import pdfplumberwith pdfplumber.open("保利地产年报.pdf") as p:page = p.pages[3] #选取第4页(起始页为0)table = page.extract_tables() #多表格读取 , 存为嵌套列表print(table)
[[['', '常用词语释义', None, None, None, None, None, ''], ['中国证监会', None, '', '指', '', '', '中国证券监督管理委员会', ''], ['国资委', None, '', '指', '', '', '国务院国有资产监督管理委员会', ''], ['上交所', None, '', '指', '', '上海证券交易所', None, None], ['公司、本公司、保利地产', None, '指', None, None, '保利发展控股集团股份有限公司 , 原名称保利房\n地产(集团)股份有限公司', None, None], ['报告期、本报告期', None, '', '指', '', '2018年度', None, None], ['元、万元、亿元', None, '', '指', '', '人民币元、人民币万元、人民币亿元', None, None]], [['公司的中文名称', '保利发展控股集团股份有限公司'], ['公司的中文简称', '保利地产'], ['公司的外文名称', 'Poly Developments and Holdings Group Co., Ltd.'], ['公司的外文名称缩写', 'PDH'], ['公司的法定代表人', '宋广菊']], [['', '董事会秘书', '证券事务代表'], ['姓名', '黄海', '尹超'], ['联系地址', '广东省广州市海珠区阅江中路688号保利国际广场北塔33层董事会办公室', None], ['电话', '020-89898833', None], ['传真', '020-89898666-8831', None], ['电子信箱', 'stock@polycn.com', None]], [['公司注册地址', '广州市海珠区阅江中路688号保利国际广场30-33层'], ['公司注册地址的邮政编码', '510308'], ['公司办公地址', '广州市海珠区阅江中路688号保利国际广场北塔30-33层'], ['公司办公地址的邮政编码', '510308'], ['公司网址', 'www.polycn.com;www.gzpoly.com'], ['电子信箱', 'stock@polycn.com']], [['公司选定的信息披露媒体名称', '《中国证券报》、《上海证券报》、《证券时报》'], ['登载年度报告的中国证监会指定网站的网址', 'www.sse.com.cn'], ['公司年度报告备置地点', '公司董事会办公室']]]
确保可正常读取表格 , 以及了解读取出来的表格的数据结构 , 下面就可以一次性读取出所有表格 , 并存入Excel文件中了 。导入相应模块 , 然后使用``打开PDF文件 。使用`()`新建Excel工作簿 , 然后使用`()`将其自带的工作表删除 。因为我们想用PDF文件中表格所在的页码给相应的Excel工作表命名 , 以便二者的编号一致 , 方便后续查询 。所以需要使用`()`给PDF的页从1开始编号 。然后使用`()`获取表格数据 。
当然 , 如果当页没有表格 , 则`()`获得的是空值`None` 。在后续的操作中 , 空值会报错 , 所以加入`if`语句来做个判断 。只有当列表``不为空 , 即里面有货的时候 , 才建新的Excel表格 , 并执行后续的写入操作 。列表``若为空(即当页没有表格) , 则直接跳到下一页 。