解析【支付宝】账单流水,PDF表格 转 Excel
风控贷后审核中,需要根据用户提供的账单流水,判断用户的还款能力,来辅助做放款决策,所以提取规格化数据是很重要的第一步。
一般情况下,用户提供的账单流水几乎都是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相关推荐
- python读取pdf并写入excel_Python读取pdf表格写入excel代码方法
本篇文章小编给大家分享一下Python读取pdf表格写入excel代码方法,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 避免CV大法 pdf 文件的 ...
- Java配合Tabula框架实现上传并解析PDF表格
功能: 解析上传的pdf表格,并存入数据库 最近有个需求,功能如上.百度了一下主要推荐的框架有两个.一个是Itext,另一个是PdfBox,都不太好用. 在之后发现了Tabula,功能很强大,就搜了搜 ...
- 提取指定的PDF表格保存到Excel
摘要:本文介绍一个提取PDF中的表格内容的程序.首先,程序给出使用示例,最后给出代码开发思路及细节. 0.需求说明 PDF中存在大量表格,需要从表格中提取出指定类型的表格,这些表格主要通过表头和表中的 ...
- python读取pdf表格_【Python 库】解析PDF文本及表格——pdfminer、tabula、pdfplumber 的用法及对比...
pdf 是个异常坑爹的东西,有很多处理 pdf 的库,但是没有完美的. 一.pdfminer3k pdfminer3k 是 pdfminer 的 python3 版本,主要用于读取 pdf 中的文本. ...
- Pdf怎么转换excel表格,职场人士必备技能
Pdf怎么转换excel表格?大家都知道工作当中使用较多的就是pdf文件格式.可是当工作当中的表格也保存为pdf文件格式时,在查看文件中发现表格当中的错误,需要修改就会变得十分麻烦.因为pdf文件不能 ...
- vb.net读取excel并写入dgv_读取PDF中的表格写入EXCEL?30行代码搞定
办公自动化系列+1 现在,各类数据分析的书籍,都可以在网上找到PDF版本: 同时,百度文库.各类数据统计文库.行业研究等众多论文报告,是通过PDF的形式去展示输出的: 但是,令人都头疼的是,各类数据分 ...
- 如何快速将pdf表格转换成excel
如何将pdf文件转换成excel文件是很多办公用户最关心的问题之一.由于普通的PDF转换成Excel转换器落后的识别技术,在对PDF文件内容是别时,因识别率低,转换出来的Excel文件内容经常出现文字 ...
- 怎么将PDF转换成Excel表格呢?
在我们的工作中,多多少少会收到一些pdf文件,其中难免会有包含表单.有时就需要整理表格中的数据,所以就需要修改表格的内容.不过pdf文件不能直接修改和编辑,因此需要将pdf文件转换成excel格式.毕 ...
- pdf转excel,如何把pdf转换成excel表格
pdf转excel,如何把pdf转换成excel表格? 作为具有极强稳定性的pdf文件,不光传输方便,而且对内容有很好的保护性,用户在pdf文件内无法随意进行的篡改编辑,极大的保护了作者的创作权.但是 ...
最新文章
- 近20年3867篇AI论文大调研:有缺陷的指标被滥用,好的指标被忽视
- opencv播放器和摄像头视频播放
- Java引用类型与常量
- C语言实现线索二叉树Threaded Binary Tree (附完整源码)
- GoldenGate 基本参数含义
- 多线程 调用多线程的方法 Runtime与ProcessBuilder
- DHCP服务(dhcpd)
- Linux时间同步(内外网/内网/外网)
- linux 命令行 文件管理器,CLEX - 集成命令提示符、“多才多艺”的命令行文件管理器...
- Android进阶之利用Tablayout+ViewPager+Fragment实现神奇的滑动效果
- U-BOOT 编译过程
- Windows下实现gettimeofday()函数
- 装机吧盘点电脑自动重启的解决办法
- python3详细安装教程
- java编译器是jdk_Java 入门(--Javac(Java编译器)--JDK--JVM--JRE--)
- 很炫的jquery焦点图,能模仿flash效果
- 微信小程序父组件向子组件传递数据
- 2020-4-22 深度学习笔记20 - 深度生成模型 5 (有向生成网络--sigmoid信念网络/可微生成器网络/变分自编码器VAE/生产对抗网络GAN/生成矩匹配网络)
- 计算机等级良好和优秀是什么意思?
- 【毕业设计】大数据客户价值分析(RFM模型)
热门文章
- 重磅 l 全国首例微信三级分销被认定为传销,三级分销“身世”揭秘(下)
- 居里夫人为爱因斯坦写的推荐信(zz)
- 医院就诊预约信息管理系统
- 005.西门子M440变频器电动电位计控制
- 人到中年,30岁失业在家,创业没资金,也找不到工作,该怎么办?
- 本地相册中图片水印如何去除【图片去水印工具】
- internal()方法
- 英文歌曲:because of you(因为你)
- 网络安全周 | 分享8个网络安全小知识
- PackageManagerService启动详解(七)之扫描系统应用安装目录阶段流程分析