风控贷后审核中,需要根据用户提供的账单流水,判断用户的还款能力,来辅助做放款决策,所以提取规格化数据是很重要的第一步。

一般情况下,用户提供的账单流水几乎都是zip压缩包,解压后是PDF文件格式,而账单流水几乎都是表格形式展示的。

那么 PDF表格 怎么转化为Excel呢?或者保存到数据库呢?

  • 主要用到 pdfplumber 包,下载:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ pdfplumber

  • 解析表头
# 导入
import pdfplumber
import rewith pdfplumber.open(input_file_path, password=password) as pdf:# 首页文本first_page_text = pdf.pages[0].extract_text()search_obj = re.search(r"兹证明:(?P<name>.*?)\(证件号码:(?P<id_card>.*?)\)在其支付宝账号(?P<account>.*?)中明细", first_page_text, re.M | re.I | re.S)if search_obj:user_name = search_obj.group('name').replace(' ', '').strip()  # 姓名id_card_no = search_obj.group('id_card').replace(' ', '').strip()  # 身份证account_number = search_obj.group('account').replace(' ', '').strip()  # 支付宝账号output_file_path = '支付宝|{}|{}|{}.xlsx'.format(user_name, id_card_no, account_number)  # 拼接文件名print('解析表头成功')else:print('解析表头失败')
  • 提取数据

使用进度条,可以查看当前解析进度,还可以省略大量日志,下载:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ tqdm

# 导入进度条
from tqdm import tqdmprint('开始读取数据')
result = list()
for index, page in enumerate(tqdm(pdf.pages)):  # 进度条table_list = page.extract_table()if table_list:result.extend(table_list)
  • 清洗数据
# 清洗数据
df = pd.DataFrame(result)df.columns = df.iloc[2]  # 提取字段
df = df.iloc[3:]  # 去除脏数据
df = df.replace(' ', '', regex=True)  # 去除所有空格,注意顺序不能换df['交易时间'] = df['交易时间'].replace('\n', ' ', regex=True)  # 时间格式
df = df.replace('\n|,', '', regex=True)  # 去除换行
df = df.reset_index(drop=True)  # 索引
df = df.fillna(np.NAN).replace('', np.NAN)  # 空值填充df['交易时间'] = pd.to_datetime(df['交易时间'].str.strip(), errors='ignore')  # 时间格式
df = df.astype({'金额': 'float'}, errors='ignore')  # 修改类型
df['金额'] = np.where(df['收/支'] == '支出', -df['金额'], np.where(df['收/支'] == '收入', df['金额'], 0))
  • 保存数据
# 保存到文件
df.to_excel(output_file_path, index=False)# 也可以保存到数据库(会自动建表)
df.to_sql(name="table_name", con=con, if_exists='append', index=False)
  • 完整代码:
# -*- coding: utf-8 -*-import re
import pdfplumber
import numpy as np
import pandas as pd
from tqdm import tqdmdef parse_pdf_ZFB(input_file_path: str, password: str = '') -> bool:"""解析解析支付宝账单流水,格式化为Excelinput_file_path:pdf文件绝对路径password:密码"""result = list()output_file_path = 'output_file_path.xlsx'  # 文件输出名with pdfplumber.open(input_file_path, password=password) as pdf:# 解析表头first_page_text = pdf.pages[0].extract_text()search_obj = re.search(r"兹证明:(?P<name>.*?)\(证件号码:(?P<id_card>.*?)\)的支付宝账户(.*?)支付宝账户 (?P<account>.*?)\n收支明细", first_page_text, re.M | re.I | re.S)if search_obj:user_name = search_obj.group('name').replace(' ', '').strip()  # 姓名id_card_no = search_obj.group('id_card').replace(' ', '').strip()  # 身份证account_number = search_obj.group('account').replace(' ', '').strip()  # 身份证output_file_path = '支付宝|{}|{}|{}.xlsx'.format(user_name, id_card_no, account_number)  # 拼接文件名print('解析表头成功')else:print('解析表头失败')print('开始读取数据')for index, page in enumerate(tqdm(pdf.pages)):  # 进度条table_list = page.extract_table()if table_list:result.extend(table_list)if result:# 清洗数据df = pd.DataFrame(result)df.columns = df.iloc[8]  # 字段df = df.iloc[9:]  # 去除脏数据df = df.replace(' ', '', regex=True)  # 去除所有空格,注意顺序不能换df['时间'] = df['时间'].replace('\n', ' ', regex=True)  # 时间格式df = df.replace('\n|,', '', regex=True)  # 去除换行df = df.reset_index(drop=True)  # 重置索引df = df.fillna(np.NAN).replace('', np.NAN)  # 空值填充df['时间'] = pd.to_datetime(df['时间'].str.strip(), errors='ignore')  # 时间格式df = df.astype({'收入': 'float', '支出': 'float', '账户余额': 'float'}, errors='ignore')  # 小数格式# 保存到文件df.to_excel(output_file_path, index=False)print('解析文件成功')return Trueelse:print('解析文件失败')return False

解析【支付宝】账单流水,PDF表格 转 Excel相关推荐

  1. python读取pdf并写入excel_Python读取pdf表格写入excel代码方法

    本篇文章小编给大家分享一下Python读取pdf表格写入excel代码方法,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 避免CV大法 pdf 文件的 ...

  2. Java配合Tabula框架实现上传并解析PDF表格

    功能: 解析上传的pdf表格,并存入数据库 最近有个需求,功能如上.百度了一下主要推荐的框架有两个.一个是Itext,另一个是PdfBox,都不太好用. 在之后发现了Tabula,功能很强大,就搜了搜 ...

  3. 提取指定的PDF表格保存到Excel

    摘要:本文介绍一个提取PDF中的表格内容的程序.首先,程序给出使用示例,最后给出代码开发思路及细节. 0.需求说明 PDF中存在大量表格,需要从表格中提取出指定类型的表格,这些表格主要通过表头和表中的 ...

  4. python读取pdf表格_【Python 库】解析PDF文本及表格——pdfminer、tabula、pdfplumber 的用法及对比...

    pdf 是个异常坑爹的东西,有很多处理 pdf 的库,但是没有完美的. 一.pdfminer3k pdfminer3k 是 pdfminer 的 python3 版本,主要用于读取 pdf 中的文本. ...

  5. Pdf怎么转换excel表格,职场人士必备技能

    Pdf怎么转换excel表格?大家都知道工作当中使用较多的就是pdf文件格式.可是当工作当中的表格也保存为pdf文件格式时,在查看文件中发现表格当中的错误,需要修改就会变得十分麻烦.因为pdf文件不能 ...

  6. vb.net读取excel并写入dgv_读取PDF中的表格写入EXCEL?30行代码搞定

    办公自动化系列+1 现在,各类数据分析的书籍,都可以在网上找到PDF版本: 同时,百度文库.各类数据统计文库.行业研究等众多论文报告,是通过PDF的形式去展示输出的: 但是,令人都头疼的是,各类数据分 ...

  7. 如何快速将pdf表格转换成excel

    如何将pdf文件转换成excel文件是很多办公用户最关心的问题之一.由于普通的PDF转换成Excel转换器落后的识别技术,在对PDF文件内容是别时,因识别率低,转换出来的Excel文件内容经常出现文字 ...

  8. 怎么将PDF转换成Excel表格呢?

    在我们的工作中,多多少少会收到一些pdf文件,其中难免会有包含表单.有时就需要整理表格中的数据,所以就需要修改表格的内容.不过pdf文件不能直接修改和编辑,因此需要将pdf文件转换成excel格式.毕 ...

  9. pdf转excel,如何把pdf转换成excel表格

    pdf转excel,如何把pdf转换成excel表格? 作为具有极强稳定性的pdf文件,不光传输方便,而且对内容有很好的保护性,用户在pdf文件内无法随意进行的篡改编辑,极大的保护了作者的创作权.但是 ...

最新文章

  1. 近20年3867篇AI论文大调研:有缺陷的指标被滥用,好的指标被忽视
  2. opencv播放器和摄像头视频播放
  3. Java引用类型与常量
  4. C语言实现线索二叉树Threaded Binary Tree (附完整源码)
  5. GoldenGate 基本参数含义
  6. 多线程 调用多线程的方法 Runtime与ProcessBuilder
  7. DHCP服务(dhcpd)
  8. Linux时间同步(内外网/内网/外网)
  9. linux 命令行 文件管理器,CLEX - 集成命令提示符、“多才多艺”的命令行文件管理器...
  10. Android进阶之利用Tablayout+ViewPager+Fragment实现神奇的滑动效果
  11. U-BOOT 编译过程
  12. Windows下实现gettimeofday()函数
  13. 装机吧盘点电脑自动重启的解决办法
  14. python3详细安装教程
  15. java编译器是jdk_Java 入门(--Javac(Java编译器)--JDK--JVM--JRE--)
  16. 很炫的jquery焦点图,能模仿flash效果
  17. 微信小程序父组件向子组件传递数据
  18. 2020-4-22 深度学习笔记20 - 深度生成模型 5 (有向生成网络--sigmoid信念网络/可微生成器网络/变分自编码器VAE/生产对抗网络GAN/生成矩匹配网络)
  19. 计算机等级良好和优秀是什么意思?
  20. 【毕业设计】大数据客户价值分析(RFM模型)

热门文章

  1. 重磅 l 全国首例微信三级分销被认定为传销,三级分销“身世”揭秘(下)
  2. 居里夫人为爱因斯坦写的推荐信(zz)
  3. 医院就诊预约信息管理系统
  4. 005.西门子M440变频器电动电位计控制
  5. 人到中年,30岁失业在家,创业没资金,也找不到工作,该怎么办?
  6. 本地相册中图片水印如何去除【图片去水印工具】
  7. internal()方法
  8. 英文歌曲:because of you(因为你)
  9. 网络安全周 | 分享8个网络安全小知识
  10. PackageManagerService启动详解(七)之扫描系统应用安装目录阶段流程分析