教程:将银行账单转换为Beancount格式

在日常生活中,我们经常需要处理各种银行账单,包括信用卡账单、储蓄账户账单等。而Beancount是一种强大的财务记账工具,可以帮助我们有效地管理和跟踪财务交易。本教程将向您展示如何将不同银行的账单转换为Beancount格式,以便更好地管理个人财务。

背景故事

假设您有多个银行账户,每月都会收到不同银行的账单。这些账单可能以不同的格式和结构呈现,使您难以一目了然地了解自己的财务状况。同时,您可能还希望将这些财务数据记录到Beancount中,以便轻松生成财务报表和分析您的支出。

因此,本教程将介绍如何使用Python编程语言来处理不同银行的账单,并将其转换为Beancount格式,使您能够更轻松地管理个人财务。

准备工作

在开始之前,您需要准备以下工作:

  1. 确保您已经安装了Python编程语言。

  2. 确保您已经安装了以下Python库:

    • pandas:用于处理和分析数据。
    • numpy:用于数值计算。
    • os:用于文件和目录操作。
    • re:用于正则表达式操作。
  3. 从您的银行获取账单文件,可以是Excel格式或CSV格式。

教程步骤

本教程将分为以下几个步骤来实现将银行账单转换为Beancount格式:

步骤一:导入所需库和设置文件路径

首先,我们需要导入所需的Python库,并设置输入文件的路径、银行名称以及输出文件的路径。以下是示例代码:

import os
import re
import pandas as pd
import numpy as np

# 获取当前文件夹路径
dir = os.path.dirname(os.path.abspath(__file__))

# 输入文件路径,可以手动输入或从命令行获取
input_file = input("输入账单路径:")

# 输入账单归属银行(目前支持CCB、CMB、SRCB、ABC)
bank = input("输入账单归属银行[CCB、CMB、SRCB、ABC]:")

# 输出文件路径
output_file = dir + "\\" + bank + ".bean"

# 配置文件路径
config_file = dir + "\\config\\" + bank + ".conf"

在这个步骤中,我们首先获取当前文件夹的路径,然后要求用户输入账单文件的路径和账单归属银行。最后,我们定义了输出文件的路径和配置文件的路径。

步骤二:整理银行账单数据

接下来,我们需要根据不同银行的账单格式,编写相应的数据整理函数。我们这里以建设银行(CCB)和招商银行(CMB)为例。

CCB账单整理

# CCB账单excel的整理
def CCB_data(_file_):
    data = pd.read_excel(_file_)
    data.columns = ["No", "text0", "CCY", "Yuan", "time", "cost", "bal", "text1", "text2"]
    data = data.iloc[2:]
    data["time"] = pd.to_datetime(data["time"]).astype(str)
    data.loc[:, "account"] = data["text0"] + ":" + data["text2"]
    data["CCY"] = data["CCY"].replace("人民币元", "CNY")
    data = data[["time", "cost", "CCY", "account", "text0", "text1", "text2"]]
    return data

CMB账单整理

# CMB账单csv的整理
def CMB_data(_file_):
    data = pd.read_csv(_file_)
    data.columns = ["time", "CCY", "cost", "bal", "text0", "text2"]
    data["time"] = pd.to_datetime(data["time"]).astype(str)
    data["cost"] = data["cost"].astype(str)
    data.loc[:, "text1"] = None
    data.loc[:, "account"] = data["text0"] + ":" + data["text2"]
    data = data[["time", "cost", "CCY", "account", "text0", "text1", "text2"]]
    return data

在这两个函数中,我们分别处理了建设银行和招商银行的账单数据,整理成统一的数据格式,包括时间、金额、货币代码、账户信息等。

步骤三:关键字查找和替换

接下来,我们需要根据配置文件中的关键字,对账单中的账户信息进行查找和替换。这可以帮助我们将不同的账户信息映射到统一的账户名称。

# 关键字查找替换
def replace(_data_, _config_):
    conf = pd.read_csv(_config_)
    for conf in conf.itertuples():
        _data_ = _data_.str.replace(".*" + conf[1] + ".*", conf[2], regex=True)
    return _data_

在这个函数中,我们读取了配置文件中的关键字和对应的替换值,然后使用正则表达式在账单数据中进行查找和替换操作。

步骤四:生成Beancount格式的字段

最后,我们将整理后的账单数据转换为Beancount格式的字段,以便后续导入到Beancount中。以下是生成Beancount字段的函数:

# 输出beancount格式的字段
def to_bean(_data_):
    global bank
    bean = _data_["time"] + ' * \"' + _data_["text

0"] + '\"\n\t'
    if _data_["text1"].notnull().any():
        bean = bean + 'notes: \"' + _data_["text1"] + '\"\n\t' 
    bean = bean + 'id: \"' + _data_["text2"] + '\"\n\t'
    bean = bean + "Assets:Bank:" + bank + " " + _data_["cost"] + " " + _data_["CCY"] + "\n\t"
    bean = bean + _data_["account"] + "\n"

    return bean

在这个函数中,我们根据Beancount的格式规范,构建了包括时间、交易描述、备注、账户信息、金额和货币代码的字段。

步骤五:导出Beancount文件

最后一步是将生成的Beancount字段写入到输出文件中,以完成账单转换操作。

# 整理为beancount格式
if bank == "CCB":
    DATA = CCB_data(input_file)
if bank == "CMB":
    DATA = CMB_data(input_file)

# 按conf文件查找替换关键字
DATA["account"] = replace(DATA["account"], config_file)

# 整理为beancount格式的字段
bean = to_bean(DATA).to_frame()

# 输出Beancount文件
for bean in bean.itertuples():
    text = text + str(bean[1]) + "\n"

file = open(output_file, 'w')
file.write(text)
file.close()

在这个步骤中,我们根据用户输入的银行名称选择相应的账单整理函数,然后进行关键字查找和替换操作,最后生成Beancount字段并导出到文件中。

结语

通过本教程,您学会了如何将不同银行的账单转换为Beancount格式,从而更好地管理个人财务。这将帮助您轻松跟踪支出、生成财务报表,并更好地了解自己的财务状况。

声明:本站所有文章,如无特殊说明或标注,均为本站(王大神)原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

给TA打赏
共{{data.count}}人
人已打赏
指数词

OPCache 分析报告

2023-11-25 11:28:33

指数词

Adobe和微软:如何在AIGC时代收割技术红利

2023-11-25 11:37:03

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索