两份流水账总对不上?30 行 Python 自动对账,差异一目了然

2026-10-01 · 喵窝资源铺

月底对账是很多人最烦的杂活:我方系统一份流水,微信/支付宝/银行一份流水,格式不一样、订单号字段名不一样,还有人手抖重复入账。肉眼用 VLOOKUP 对几百行,一下午就没了还容易漏。

这篇给一个 30 行、可直接运行 的对账脚本,本文代码在 pandas 3.0.6 下实跑验证,输出如下文所示。

脚本想解决的三类差异

完整脚本

两份文件支持 Excel(.xlsx) 和 CSV,各自指定"单号列"和"金额列",不用改数据源格式:

"""对账脚本:两份流水 Excel(或CSV)按订单号对齐,自动找出差异。
用法:python reconcile.py 我方.csv 订单号 金额 对方.xlsx 交易编号 入账金额
"""
import sys
import pandas as pd


def load(path, id_col, amt_col):
    df = pd.read_csv(path) if path.lower().endswith(".csv") else pd.read_excel(path)
    df = df[[id_col, amt_col]].copy()
    df.columns = ["id", "amount"]
    df["id"] = df["id"].astype(str).str.strip()
    df["amount"] = pd.to_numeric(df["amount"], errors="coerce")
    return df.dropna()


def main(my_file, my_id, my_amt, their_file, their_id, their_amt):
    mine = load(my_file, my_id, my_amt).rename(columns={"amount": "mine"})
    theirs = load(their_file, their_id, their_amt).rename(columns={"amount": "theirs"})
    m = pd.concat([mine.groupby("id").sum(), theirs.groupby("id").sum()]).groupby(level=0).sum(min_count=1)

    out = m.fillna(0)
    out["diff"] = (out["mine"].fillna(0) - out["theirs"].fillna(0)).round(2)
    only_mine = m.index[m["theirs"].isna()]
    only_theirs = m.index[m["mine"].isna()]
    mismatched = out[(out["diff"] != 0) & ~out.index.isin(only_mine) & ~out.index.isin(only_theirs)]

    print(f"我方独有 {len(only_mine)} 笔:", list(only_mine)[:10])
    print(f"对方独有 {len(only_theirs)} 笔:", list(only_theirs)[:10])
    print(f"金额不一致 {len(mismatched)} 笔:")
    print(mismatched.to_string() if len(mismatched) else "(无)")
    out.reset_index().to_excel("对账结果.xlsx", index=False)
    print("明细已写 对账结果.xlsx")


if __name__ == "__main__":
    main(*sys.argv[1:7])

实测效果

构造一份测试数据:我方 4 笔;对方 5 条记录,其中 A2 被重复入账了两次(199.5 + 200.5),另有对方独有的 A5。跑:

python reconcile.py 我方.csv 订单号 金额 对方.csv 交易编号 入账金额

输出(真实运行结果):

我方独有 1 笔: ['A4']
对方独有 1 笔: ['A5']
金额不一致 1 笔:
      mine  theirs   diff
A2   200.5   400.0 -199.5
明细已写 对账结果.xlsx

三行就点出全部问题:A4 只在我方、A5 只在对方、A2 对方合计 400 对不上(点开对账结果.xlsx 就能看到是重复入账)。

两个容易踩的坑

什么情况需要更进一步的版本

这个脚本适合"两边都能按唯一单号对齐"的场景。如果你遇到的是:两边单号规则不同(需要模糊匹配)、按日期+金额对齐、或者几百个 sheet 批量跑——那是另一个量级的活,可以找我们代写(见下)。

不想自己跑?我们代做。把两份文件发过来,9.9 元起,AI 编写 + 人工核验交付,24 小时内出对账结果。
⚠️ 虚拟物品一经交付概不退款;未达到承诺效果免费重做。
👉 喵窝资源铺 · 服务清单

相关阅读:多个 Excel 表怎么合并?4 种方法 · 800 个乱文件自动整理