乐于分享
好东西不私藏

一行命令,把任意银行的 PDF 流水变成整齐的 Excel

一行命令,把任意银行的 PDF 流水变成整齐的 Excel

       还在手动逐行抄银行流水?遇到加密 PDF、表头奇形怪状、金额列错位、时间被拆成两列……一个通用的解析器,把这些问题一次性解决掉。

一、先说说痛点

做财务、做出纳、做审计的朋友应该都遇到过这样的场景:

  • 银行流水导出的是 加密 PDF,打不开、复制不了
  • 不同银行的表头五花八门:有的叫"交易金额",有的叫"借方/贷方",有的干脆中英文混排
  • 金额列经常和"余额"列混在一起,一不留神就把余额当成了交易额
  • 有的银行把"交易时间"拆成 2026/03/25 和 11:32:19 两列,导出后时间跑到一个叫 字段_3 的幽灵列里
  • 几百条流水,人工核对到眼花,还不敢保证没错一条

于是就有了这个工具:银行 PDF 流水账单解析器

它不针对任何一家银行写死规则,而是用一套通用解析引擎,理论上能吃下绝大多数银行的流水 PDF,并把金额、户名、账号这些关键字段的准确率压到很高。

二、它能做什么

一句话概括:输入一个银行流水 PDF,输出一个字段整齐、金额准确、可按日期排序的 Excel

具体来说:

  • 自动识别 PDF 表头,无需预设银行类型
  • 自动提取交易日期、交易时间、交易金额、账户余额、对方户名、对方账号、对方开户行、摘要等字段
  • 自动处理加密 PDF(输入密码即可)
  • 自动合并多页表格、续行、跨页表头
  • 导出前自动按时间倒序排序
  • 空字段显示为空白,不再是恼人的 nan

三、为什么敢说"金额准确"

涉及钱的事情,差一分都不行。这个工具在金额准确性上做了四层保障

1. 双通道提取,择优选用

每一页 PDF 会同时跑两条解析路径:

  • 表格通道
    :用 pdfplumber 的多种策略提取表格结构
  • 文本通道
    :用正则按行结构直接抽取日期、币种、金额、余额

两条路径的结果会进行质量评分(看列数是否一致、表头是否覆盖关键词、数据行占比等),分数高的胜出。

这样做的好处是:哪怕某家银行的表格线画得乱七八糟,文本通道还能救回来;反过来,表格结构清晰时,表格通道能保留更多列信息。

2. 金额字符串化,拒绝精度丢失

金额全部以字符串保存(比如 -1984.04),而不是直接转成浮点数。

别小看这一步,浮点数在 0.1 + 0.2 这种运算上就会出问题,财务数据绝不能容忍。

3. 借贷分列自动合并

有的银行把"借方金额"和"贷方金额"分成两列,工具会自动合并成带符号的交易金额(支出为负、收入为正),方便后续求和与核对。

4. 余额连续性校验(最关键的一道防线)

这是金额准确性的黄金标准

工具会按时间排序后,逐条验证:

上一条余额 ± 本条交易金额 ≈ 当前余额

允许 ±0.02 的误差(四舍五入导致)。一旦某条对不上,会在解析日志里明确标出第几条记录异常、上一条余额多少、当前余额多少、交易金额多少,方便你定点人工复核。

四、那个"字段_3"是怎么被治好的

这是一个真实案例。

某股份制银行的流水,交易时间在 PDF 里显示为 2026/03/25 11:32:19,但 pdfplumber 提取表格时,把日期和时间拆成了两个单元格。结果时间 11:32:19 被扔进了一个无法识别的列,工具给它起了个名字叫 字段_3

早期的处理方式是"检测到 字段_X 就过滤掉"——结果时间数据丢了。

现在的处理方式是智能合并

  • 工具发现 字段_3 的内容是时间格式(11:32:19
  • 检查"交易时间"字段,发现里面只有日期 2026/03/25,没有冒号(说明缺时间部分)
  • 自动把时间拼接上去,变成完整的 2026/03/25 11:32:19
  • 然后删掉 字段_3

整个过程全自动,日志里会留一条提示:

[字段合并] 全局:已将 47 个孤立字段(时间/日期)自动合并到交易时间/交易日期

五、解析日志:哪里不对,一目了然

这是这个工具我个人最喜欢的设计。

解析完成后,界面下方的「解析结果 / 日志」区域会列出所有"非正常情况",并且逐条标明位置和原因

日志类别
说明
余额异常
余额不连续的记录,标出第几条、上一个余额、当前余额
文本解析失败
疑似交易行但无法按规则解析,已跳过
续行丢弃
孤立续行无法安全合并(可能影响户名完整性)
续行合并
已把续行合并到上一条交易
数据过滤
跳过了表头行、合计行、英文说明行
字段合并
孤立时间/日期字段已合并到交易时间
表头识别异常
检测到无法识别的字段,已自动过滤
重复记录
移除了完全重复的行

每条日志的格式长这样:

3. [续行丢弃] PDF第2页,文本第21行:孤立续行无法安全合并 | 原文: 纳才(北京)咨询有限公司北京

哪个文件、第几页、第几行、什么原因、原文是什么,全都清清楚楚。

这意味着:哪怕某条数据解析得不对,你也能立刻定位到它,而不是面对一个"看似没问题"的 Excel 暗藏错误

六、上手非常简单

环境要求

  • Windows 10/11(也支持 macOS/Linux)
  • Python 3.9 及以上

三步跑起来

# 1. 创建并激活虚拟环境python -m venv venv.\venv\Scripts\Activate.ps1# 2. 安装依赖pip install -r requirements.txt# 3. 启动 GUIpython gui_app.py

界面打开后:选 PDF → 输密码 → 点「开始解析」→ 勾选要导出的字段 → 点「导出 Excel」,完事。

一键打包成 EXE

如果你要给不会装 Python 的同事用,一行命令打包成单文件 EXE:

python build.py

产出在 dist\银行PDF流水账单解析器.exe,拷到任意 Windows 电脑就能双击运行,不需要装任何环境。

把自己准备的图标命名为 app.ico 放到项目根目录,打包时会自动嵌入。

七、目前验证过的银行

工具是通用的,不针对单一银行写规则。目前已经实测通过的银行有:

  • 中国银行
  • 农业银行
  • 招商银行
  • 民生银行

其中招商银行一个 20 页、469 条交易的 PDF,旧版只能提取出 19 条,新版能稳定提取 468 条,余额校验全部通过。

别的银行欢迎自行测试,遇到解析不理想的情况,把「解析日志」发给我,可以持续迭代。

八、技术原理(给懂行的朋友)

整个解析流程可以概括为五步:

  1. 双通道提取
    :表格通道(pdfplumber 多策略)+ 文本通道(行结构正则),每页择优
  2. 列语义识别
    :通过表头关键词 + 数据特征(是否日期/金额/账号)自动映射到标准字段,而非依赖表头完全匹配
  3. 数据清洗
    :日期格式统一、续行合并、金额标准化、去重
  4. 孤立字段合并
    :把误拆的时间/日期列合并回交易时间
  5. 余额校验
    :按时间排序后逐条验证余额连续性,标记异常行

关键设计是不硬编码银行名称。所有"银行特性"都通过数据特征自动识别,这样遇到没见过的银行也能有一战之力。

九、写在最后

做这个工具的初衷很简单:凡是涉及钱的操作,就不该让人肉眼看 PDF 抄数字

把重复劳动交给程序,把校验交给算法,人只需要在日志标红的几条上做最后确认——这才是处理财务数据该有的样子。

如果你也经常和银行流水打交道,不妨试一试,提提反馈,一起把它打磨得更稳。


本文工具基于 Python + pdfplumber + PyQt5 开发.