<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: fang xia</title>
    <description>The latest articles on DEV Community by fang xia (@fangxia000101).</description>
    <link>https://dev.to/fangxia000101</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3955651%2F9905f6c9-af44-49ee-b3a2-a734ff3cf45d.png</url>
      <title>DEV Community: fang xia</title>
      <link>https://dev.to/fangxia000101</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/fangxia000101"/>
    <language>en</language>
    <item>
      <title>我为什么开始用 Beancount</title>
      <dc:creator>fang xia</dc:creator>
      <pubDate>Fri, 17 Jul 2026 05:54:53 +0000</pubDate>
      <link>https://dev.to/fangxia000101/wo-wei-shi-yao-kai-shi-yong-beancount-4gj4</link>
      <guid>https://dev.to/fangxia000101/wo-wei-shi-yao-kai-shi-yong-beancount-4gj4</guid>
      <description>&lt;h1&gt;
  
  
  我为什么开始用 Beancount
&lt;/h1&gt;

&lt;p&gt;两年前，我做了一个看起来很"反直觉"的决定：放弃了所有那些漂亮、智能、自动同步的商业记账 App，转而用纯文本记账。&lt;br&gt;
是的，你没看错。现在我每一笔消费、每一笔收入，都记录在一个 .bean 文件里。没有图表，没有自动分类，没有"云端同步"。只有我、文本编辑器、和一些看起来像会计分录的 plain text。&lt;br&gt;
很多人听到这里就会问：&lt;strong&gt;为什么？&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  被锁死的数据
&lt;/h2&gt;

&lt;p&gt;故事要从我换手机说起。&lt;br&gt;
那时候我用某款记账 App 用了三年。记录了三千多条交易，标签打得整整齐齐，每个月还能导出漂亮的报表分析——&lt;strong&gt;只要续费会员&lt;/strong&gt;。&lt;br&gt;
有一天我换了新手机，发现这个 App 的云端同步需要会员才能用。我的数据在他们的服务器上，但我拿不回来。导出功能？付费。批量导出？更贵的会员。&lt;br&gt;
那一刻我突然意识到：&lt;strong&gt;这些数据不是我的，是他们的。&lt;/strong&gt;&lt;br&gt;
我花了三年时间帮他们的平台完善数据，现在他们要我把数据"赎"回来。&lt;/p&gt;

&lt;h2&gt;
  
  
  寻找属于我的记账方式
&lt;/h2&gt;

&lt;p&gt;我开始寻找替代方案。主要诉求就两个：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;数据必须在我手里&lt;/strong&gt;- &lt;strong&gt;格式要是开放的，不能被某个产品绑架&lt;/strong&gt;找了很久，最后发现了 Beancount。
一个 Python 开发的复式记账工具。没有数据库，所有账目存在纯文本文件里。格式简单到令人发指：
2024-07-15 * "星巴克"
Assets:Checking       -35.00 CNY
Expenses:Coffee:Shop
就这么简单。日期、交易对方、两个账户、金额。
## 为什么是 Plain Text？
选择纯文本不是因为我喜欢复古，而是因为：
&lt;strong&gt;1. 永远不会过期&lt;/strong&gt;
文本文件是计算机世界最通用的格式。十年后、二十年后，只要有文本编辑器，我就能看懂我的账目。不需要担心某个公司倒闭、App 下架、云端服务关闭。
&lt;strong&gt;2. 版本控制友好&lt;/strong&gt;
我的账目目录是个 Git 仓库。每次记账 git commit 一下。我有完整的历史记录——可以追溯任何一笔修改是什么时候、为什么做的。这不是云端同步能比的。
&lt;strong&gt;3. 可编程&lt;/strong&gt;
既然是文本，就能用代码处理。Beancount 本身就是 Python 生态，我可以写脚本自动抓取银行流水、自动分类、生成报表。这不是"高级功能"，而是文本格式天然带来的自由。
&lt;strong&gt;4. 真正的复式记账&lt;/strong&gt;
之前用的记账 App 大多是"单式记账"——记录"花了多少钱"。但复式记账要求每一笔交易都有来源和去向。钱从"现金"到了"餐饮"，或者从"工资"到了"储蓄"。
这听起来很会计，但好处是：&lt;strong&gt;账永远不会不平。&lt;/strong&gt; 如果漏记或多记，Beancount 会直接报错。
## 踩坑实录
当然，这条路不是一帆风顺的。
&lt;strong&gt;第一周：&lt;/strong&gt; 我把"贷"和"借"搞反了 N 次。复式记账的逻辑需要一点时间适应。
&lt;strong&gt;第一个月：&lt;/strong&gt; 发现手动录入太慢，开始研究自动导入。花了一整周末琢磨如何把支付宝账单转成 Beancount 格式。
&lt;strong&gt;第三个月：&lt;/strong&gt; 终于建好了自己的账户体系。但发现早期记录的分类太混乱，又花了一个周末批量重命名账户。
现在？现在我已经 800 多天没有断过记录。每天花 5 分钟，甚至少于一分钟。
## 我学到了什么
这两年的 Beancount 实践，让我对"个人数据"有了新的理解：
&lt;strong&gt;数据主权不是一句口号。&lt;/strong&gt;
当你的数据存储在别人控制的平台上，你就是租客。他们可以改规则、可以涨价、可以关停服务。而你的数据——那些记录了你生活轨迹的数字——本质上不属于你。
Plain text 是最彻底的数据主权。因为没人能阻止你打开一个文本文件。没人能因为你没续费就锁住你三年的回忆。
## 写在最后
我不是说 Beancount 适合所有人。
如果你需要自动同步银行账户、需要漂亮图表、需要开箱即用的体验，那商业记账 App 可能更适合你。
但如果你和我一样：在意数据主权、喜欢可定制、愿意花一点时间建立自己的系统——那 Beancount 可能会打开一个新世界的大门。
我的账目文件目录现在是这个样子：
beancount/
├── main.bean          # 主账本
├── prices.bean        # 价格记录
├── accounts.bean      # 账户定义
└── .git/              # 完整历史
简单、透明、永远属于我。
如果你也对 Beancount 感兴趣，可以从官方文档开始：&lt;a href="https://beancount.github.io/" rel="noopener noreferrer"&gt;beancount.github.io&lt;/a&gt; 中文社区也有不少资源，byvoid 的系列教程很值得一看。&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>fintech</category>
      <category>opensource</category>
      <category>productivity</category>
      <category>python</category>
    </item>
  </channel>
</rss>
