你是不是也有过这样的烦恼?每个月对着Excel表格头晕眼花,记不清钱到底花在哪里了?🤯 信用卡账单、支付宝、微信支付……各种流水对不上,年底复盘简直是一场灾难。
今天给大家介绍一个程序员看了直呼内行的理财神器——Beancount!它完全颠覆了传统记账软件的使用体验,让你用写代码的方式管理财务,却比Excel还要简单直观。

📝 纯文本记账:所有账目都写在普通的.beancount文件里,像写日记一样简单,版本管理超方便(Git大法好!)。
🔢 自动复式平衡:每笔交易自动检查“有借必有贷,借贷必相等”,再也不怕账对不上了。
🌍 多币种支持:人民币、美元、欧元甚至比特币都能一起管理,自动汇率换算。
📊 丰富报表:一键生成资产负债表、损益表、资金流水,可视化你的财务状况。
🔌 插件生态:自动对账、价格抓取、文档关联……各种插件满足进阶需求。
想象一下这个场景:小王是个自由职业者,收入来源有人民币稿费、美元外包项目,还有少量的加密货币投资。他每次记账都要:
😱 简直是财务版的“屎山代码”!
而用Beancount,小王的记账文件可能是这样的:
2024-01-15 * "收到稿费" Assets:Bank:ICBC 5000.00 CNY Income:Writing -5000.00 CNY2024-01-20 * "美元项目结款" Assets:Bank:PayPal 1000.00 USD Income:Freelance -1000.00 USD2024-01-25 * "兑换美元为人民币" Assets:Bank:ICBC 7200.00 CNY Assets:Bank:PayPal -1000.00 USD @ 7.2 CNY看明白了吗?就像在写自然语言日记,但背后是严谨的复式记账体系。每一笔交易都自动平衡,币种转换清晰明了。
首先确保你安装了Python 3.7或更高版本,然后用pip一键安装:
pip install beancount安装完成后,可以验证一下:
bean-check --version新建一个my-finances.beancount文件,开始编写:
; 首先定义账户类型,就像创建文件夹一样2024-01-01 open Assets:Bank:ICBC CNY2024-01-01 open Assets:Bank:PayPal USD,CNY2024-01-01 open Expenses:Food CNY2024-01-01 open Expenses:Shopping CNY 2024-01-01 open Income:Salary CNY账户命名遵循类型:子类别:具体账户的层级结构,用英文冒号分隔。Beancount默认支持五类账户:
现在来记录一笔早餐消费:
2024-01-16 ! "包子铺买早餐" Expenses:Food 15.00 CNY Assets:Bank:ICBC -15.00 CNY✏️ 格式解析:
2024-01-16!*表示已确认,!表示待检查)"包子铺买早餐"-15.00 CNY),变成食物支出(+15.00 CNY)2024-01-25 * "收到1月工资" Assets:Bank:ICBC 15000.00 CNY Income:Salary -15000.00 CNY注意到区别了吗?收入账户的金额是负数,这是因为在复式记账中,收入减少你的“欠公司钱”的权益(是不是很反直觉?🤔 记住规则就行:资产增加记正数,负债和权益增加记正数,收入和支出增加记正数)。
Beancount最强大的功能之一是余额断言。就像编程中的单元测试,确保你的账目没有错误:
2024-01-31 balance Assets:Bank:ICBC 19850.00 CNY运行检查命令:
bean-check my-finances.beancount如果实际余额不是19850.00元,Beancount会报错告诉你哪里出问题了!这比月末对账轻松多了吧?
如果你是股民,Beancount还能记录股票投资:
2024-01-10 * "买入腾讯股票" Assets:Brokerage:Stocks 10 TENCENT {320.00 HKD} Assets:Brokerage:Cash -3200.00 HKD2024-01-28 * "卖出部分腾讯" Assets:Brokerage:Stocks -5 TENCENT {320.00 HKD} @ 350.00 HKD Assets:Brokerage:Cash 1750.00 HKD Income:Investments:PnL -150.00 HKD ; 自动计算盈亏!花括号{}里是成本价,@后面是卖出价,Beancount会自动计算资本利得!
账记好了,不看报表怎么行?Beancount内置多种报表生成:
bean-report my-finances.beancount balances输出示例:
AssetsBankICBC19,850.00 CNYPayPal1,000.00 USDBrokerageCash1,750.00 HKDStocks5 TENCENT {320.00 HKD}Liabilities NoneEquity -22,600.00 CNY ; 净资产bean-report my-finances.beancount incomebean-report my-finances.beancount journal给交易打标签,方便分类查询:
2024-01-16 * "团队聚餐" #work-dinner ^invoice-2024-001 Expenses:Food:Dining 350.00 CNY Assets:Bank:ICBC -350.00 CNY#work-dinner是标签,^invoice-2024-001是链接(可以关联多个交易)。
自动获取汇率和股价:
2024-01-28 price TENCENT 350.00 HKD2024-01-28 price USD 7.20 CNY然后就可以查看投资组合市值:
bean-report my-finances.beancount holdings --market在账本文件开头加载插件:
plugin "beancount.plugins.auto_accounts"plugin "beancount.plugins.implicit_prices"常用插件:
虽然Beancount是文本记账,但可以和自动化工具结合:
# 使用第三方工具转换银行CSVcsv2beancount bank-statement.csv >> my-finances.beancount# 定时任务自动更新0 9 * * * /path/to/update-finances.sh| 学习成本 | ||||
| 灵活性 | ||||
| 数据掌控 | ||||
| 自动化能力 | ||||
| 多币种支持 | ||||
| 报表丰富度 | ||||
| 移动端支持 |
Beancount最适合谁?
让我们看看自由职业者小王如何用Beancount搭建完整系统:
finance-2024/├──main.beancount# 主账本文件├──accounts.beancount# 账户定义├──prices.beancount# 价格历史├──imports/# 导入数据│├──icbc-2024-01.csv│├──paypal-2024-01.csv│└──brokerage-2024-01.csv├──scripts/# 自动化脚本│├──import-bank.py│└──generate-reports.py└──reports/# 生成报表├──2024-01-balance.pdf└──2024-01-income.pdf; finance-2024/main.beancount; 1. 包含其他文件include "accounts.beancount"include "prices.beancount"; 2. 加载插件plugin "beancount.plugins.auto_accounts"plugin "beancount.plugins.check_drained"; 3. 选项配置option "title" "小王2024年度账本"option "operating_currency" "CNY"option "documents" "finance-2024/documents/"; 4. 2024年交易记录2024-01-01 balance Assets:Bank:ICBC 5000.00 CNY ; 年初余额include "imports/transactions-2024-01.beancount"include "imports/transactions-2024-02.beancount"; ... 每月一个文件#!/usr/bin/env python3# scripts/generate-monthly-report.pyimport subprocessfrom datetime import datetimedefgenerate_report(month: str):"""生成月度报告""" input_file = "finance-2024/main.beancount"# 1. 检查账本 subprocess.run(["bean-check", input_file], check=True)# 2. 生成资产负债表withopen(f"reports/{month}-balance.txt", "w") as f: subprocess.run(["bean-report", input_file, "balances"], stdout=f)# 3. 生成损益表 withopen(f"reports/{month}-income.txt", "w") as f: subprocess.run(["bean-report", input_file, "income"], stdout=f)print(f"✅ {month}报告已生成")if __name__ == "__main__": current_month = datetime.now().strftime("%Y-%m") generate_report(current_month)# 每天上午9点检查账本09 * * * cd /home/wang/finance-2024 && bean-check main.beancount# 每月1号生成上月报告0101 * * cd /home/wang/finance-2024 && python scripts/generate-monthly-report.py# 每周一更新价格数据08 * * 1 cd /home/wang/finance-2024 && python scripts/fetch-prices.pyQ: 我不是程序员,能用Beancount吗?A: 如果你愿意花2-3小时学习基础语法,完全可以!Beancount的语法比Excel公式简单多了。社区也有可视化编辑器和移动端App(如Beancount Mobile)。
Q: 数据安全吗?A: 你的数据就是文本文件,可以放在本地、私有Git仓库或加密云盘。相比云端记账软件,你的财务数据完全由自己掌控。
Q: 能处理支付宝/微信的复杂账单吗?A: 可以!虽然有学习成本,但一旦写好导入规则,后续都是自动化的。社区有很多现成的导入工具。
Q: 夫妻共同记账怎么办?A: 用Git管理账本文件,两人分别记账后合并。Beancount的清晰变更历史,比Excel的“最后保存者获胜”强多了!
Q: 税务申报时能用吗?A: 当然!Beancount可以导出标准格式(CSV、JSON),方便导入税务软件或给会计师。
Beancount不仅仅是一个记账工具,它更是一种财务思维框架。通过强制你使用复式记账,你会自然而然地理解:
pip install beancountmy-finances.beancount文件bean-check验证账本从今天开始,告别混乱的Excel表格,用工程师的方式管理你的财富。毕竟,如果连自己的钱都管不清楚,还怎么管理更复杂的事情呢?💪
你的财务,值得更好的工具。Beancount,让每一分钱都有迹可循。
本文介绍的Beancount是完全开源免费的工具,项目地址可在GitHub搜索"beancount"找到。本文仅作技术分享,不构成任何投资理财建议。投资有风险,入市需谨慎。