农行pdfToCsv
一、功能概述
本工具用于解析中国农业银行活期交易明细PDF文件,提取结构化交易数据并输出为CSV格式文件。 主要实现以下功能:
- 异体字标准化处理(支持84个异体字转换)
- PDF文本布局解析(保留原始排版结构)
- 交易时间自动补全(缺失时间字段时补零)
- 短行合并处理(解决PDF换行错误问题)
- 特定业务规则适配(苹果支付URL处理、信用卡交易格式修正等)
二、核心配置说明
1. 字符替换映射表(_CHAR_REPLACEMENTS
)
- 作用:解决PDF解析产生的异体字问题
- 示例:
'⾏': '行' # 将康熙部首"⾏"转换为标准汉字"行" '⽔': '水' # 处理Unicode兼容字符
- 维护规则:新增替换项需验证字形一致性,避免误替换。
2. PDF文件列表(_PDF_FILES
)
要提取的文件放到这里
三、核心处理流程
1. 整体流程
graph LR
A[加载PDF文件] --> B[逐页提取文本]
B --> C[字符标准化处理]
C --> D[单行格式修正]
D --> E[短行合并]
E --> F[过滤无效行]
F --> G[输出CSV]
2. 分步逻辑说明
(1) 字符标准化处理(replace_special_chars
)
- 输入:原始文本行(可能包含异体字、非常规Unicode字符)
- 处理逻辑:
- 通过
str.translate
应用预定义的异体字替换表(_TRANS_TABLE
) - 使用
unicodedata.normalize("NFKC")
进行Unicode兼容性标准化
- 通过
- 示例:
输入:"⽔⽇交易" → 输出:"水日交易"
(2) 单行格式修正(process_line
)
将PDF解析后的原始文本行转换为符合CSV格式的标准化字段,解决以下问题:
- 字段分隔符不一致(空白符、逗号混合)
- 特定业务格式错误(如URL跨行、信用卡交易拆分)
- 时间字段缺失
- 年份相关的日志号缺失
2. 分步处理逻辑
将连续空格、制表符等空白字符替换为单个逗号:line = re.sub(r'\s+', ',', line.strip())
清理多余逗号:line = line.replace(",,", ",")
苹果支付URL合并(去掉对手的url):line.replace('https:www.apple.comcnitunescharts,https:www.apple.comcnitunescharts ', 'https:www.apple.comcnitunescharts')
信用卡交易格式修正(信用卡中心,(特约)交通银行(信用卡):line.replace('错误格式', '正确格式')
年费、利息等记录补全时间信息(默认:000000)
为2022年添加日志号信息
修正位置的交易附言(例如”TH99“)
(3) 短行合并(merge_short_lines
)
1. 合并规则
条件1:行长度≤13字符(PDF换行错误导致内容不完整)
条件2:以
https:www.apple
开头的行(URL跨行显示)合并方式:
merged[-1] += f"->{line}" # 使用"->"标记合并点
最终处理:输出前移除
->
标记,还原完整内容。
(4) 结果写入(main
函数)
- 标题行:固定写入CSV列名
交易日期,交易时间,交易摘要,交易金额,本次余额,对手信息,日志号,交易渠道,交易附言
- 过滤规则:跳过以
PREFIXES_TO_MATCH
中定义的关键词开头的无效行。
四、版本记录
- v1.2 (2025-03-09)
- 大量的修改,名称变更为
pdfToCsvAboutABC.py
- 大量的修改,名称变更为
- v1 (2024-xx-xx)
- 名为
p1
的版本
- 名为