个人财务管理系统Python实现:从docx设计到SQLite数据库落地
简介这是一份面向Python初学者与编程练习者的个人财务管理系统项目文档以面向对象思路讲解如何用代码记录收入支出、统计余额并生成收支报告适合作为课程设计、入门练手或教学演示的参考素材。资源包内共1个docx文件约19KB文档围绕FinancialManager核心类展开涵盖__init__初始化交易列表、add_transaction添加交易、get_balance计算总余额、generate_report生成报告等方法并附完整示例代码演示创建实例、录入工资与租金等交易、输出财务报告的全过程。文档还延伸讨论了用户登录验证、数据持久化、多货币处理、预算警告、自动分类与图表展示等扩展方向便于读者在此基础上继续完善功能。目前已有65人学习下载适合希望理解类与对象、列表字典操作及简单财务逻辑实现的读者参考借鉴。1. 从一份 docx 说起个人财务管理系统到底能跑出什么效果很多人第一次拿到「个人财务管理系统」这类资源脑子里浮现的是记账 App 那种花哨界面结果打开一看是一份 docx 文档心里先凉了半截。先别急着关掉——这类文档型资源的价值不在「能直接双击运行」而在于它把一套完整的业务逻辑、数据结构和模块划分摊开给你看。我见过太多人卡在「想自己写一个记账工具但不知道账目表该怎么设计、收支分类怎么拆、月度统计怎么算」这一步而这份文档恰好就是干这个的。它适合两类人一类是刚学完 Python 基础语法、想找个完整项目练手的新手另一类是想快速搭一个本地记账原型、验证数据模型是否合理的熟手。核心要解决的问题很明确——把「收入、支出、分类、账户余额、月度汇总」这几件事用代码串起来而不是停留在「我要做个记账软件」的口号上。这份资源以 docx 形式交付意味着它更偏向设计说明与实现思路的载体而不是一个开箱即用的 exe。你需要做的是把它当成一份「施工图」自己动手把里面的表结构、函数划分、统计逻辑翻译成可运行的 Python 代码。下面我会按「先立数据模型 → 再搭核心功能 → 最后补统计与导出」的顺序把这份文档里最值得复现的部分拆开讲中间穿插我实际落地时踩过的坑。如果你手里正好有这份文档跟着走一遍基本能拿到一个能跑、能存、能查的本地财务管理系统雏形。2. 数据模型先立住账目表、分类表与账户表怎么拆2.1 为什么不能只用一张表记所有账新手最容易犯的错是建一张records表字段堆成id, type, amount, category, account, date, note然后所有逻辑都围着它转。刚开始跑得挺顺一旦你要做「按账户统计余额」「按分类看月度占比」「跨账户转账」这张表立刻变成一团乱麻。常见做法是拆成三张核心表accounts账户、categories分类、transactions流水。账户表管钱从哪来、到哪去分类表管这笔钱算什么性质流水表只负责记录「某时某账户发生了一笔某分类的收支」。这样拆的好处是转账可以表示成两条流水一出一进余额可以实时算也可以缓存分类改名不影响历史流水。我一般会再加一张settings表存默认货币、小数位数、月度起始日这类配置避免硬编码。下面是我从文档思路里还原出来的建表语句SQLite 足够跑本地场景不用上 MySQL。-- 账户表现金、银行卡、某支付平台余额都算一个账户 CREATE TABLE accounts ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL UNIQUE, -- 账户名如「现金」「工资卡」 type TEXT NOT NULL DEFAULT cash, -- cash / bank / wallet balance REAL NOT NULL DEFAULT 0, -- 当前余额转账时同步更新 created_at TEXT DEFAULT (datetime(now, localtime)) ); -- 分类表收入和支出分开管理避免混用 CREATE TABLE categories ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, kind TEXT NOT NULL CHECK (kind IN (income, expense)), -- 收入还是支出 parent_id INTEGER DEFAULT NULL, -- 支持二级分类如「餐饮」下挂「外卖」 UNIQUE(name, kind) ); -- 流水表只记事实不存余额 CREATE TABLE transactions ( id INTEGER PRIMARY KEY AUTOINCREMENT, account_id INTEGER NOT NULL, category_id INTEGER NOT NULL, amount REAL NOT NULL CHECK (amount 0), -- 金额永远为正方向由 kind 决定 kind TEXT NOT NULL CHECK (kind IN (income, expense, transfer)), happened_on TEXT NOT NULL, -- 发生日期格式 YYYY-MM-DD note TEXT DEFAULT , created_at TEXT DEFAULT (datetime(now, localtime)), FOREIGN KEY (account_id) REFERENCES accounts(id), FOREIGN KEY (category_id) REFERENCES categories(id) );逻辑说明amount强制为正数方向靠kind区分这样统计时不用处理负数减少符号错误。happened_on和created_at分开是因为补录昨天甚至上个月的账很常见统计要按发生日期走不能按录入时间。parent_id让分类支持层级但查询时要注意递归或只查一级别在流水里直接挂二级分类导致汇总重复。参数方面type字段我建议只留三种值多了反而难维护kind用 CHECK 约束住防止手滑写入expense 带空格这种脏数据。如果你用 MySQL把AUTOINCREMENT换成AUTO_INCREMENTdatetime(now, localtime)换成NOW()即可。2.2 余额到底该实时算还是存字段这是文档里没写透、但落地必炸的一个点。accounts.balance我上面留了字段但你要清楚它是个缓存值。每次新增流水、修改流水、删除流水都必须同步更新对应账户的余额否则查出来的余额和流水对不上用户立刻失去信任。稳妥做法是写一个recalc_balance(account_id)函数任何写操作后调用它重算而不是手动加减。def recalc_balance(conn, account_id): 根据流水重算账户余额避免手动加减出错 cur conn.cursor() # 收入加支出减转账按方向在流水里已拆成两条这里统一处理 cur.execute( SELECT COALESCE(SUM(CASE WHEN kind income THEN amount WHEN kind expense THEN -amount ELSE 0 END), 0) FROM transactions WHERE account_id ? , (account_id,)) new_balance cur.fetchone()[0] cur.execute(UPDATE accounts SET balance ? WHERE id ?, (new_balance, account_id)) conn.commit() return new_balance逻辑说明转账在流水表里表现为两条记录一条kindtransfer且金额为负出账一条为正入账但上面 SQL 把 transfer 统一按 0 处理了所以转账需要单独在写入时拆成一条 expense 和一条 income或者扩展 SQL 判断方向。我一般图省事转账直接写成两条普通流水备注里标「转账至 XX」这样余额重算逻辑不用特殊分支少一个玄学 bug。参数上account_id是必传的重算范围只限该账户别全表重算数据量大了会卡。如果你账户多、流水上百万建议加索引CREATE INDEX idx_tx_account ON transactions(account_id, happened_on);。3. 核心功能落地增删改查、分类统计与月度报表3.1 一笔流水的完整写入流程文档里通常只写「添加记录」但实际落地要处理账户是否存在、分类 kind 是否匹配、金额是否合法、日期格式对不对。我习惯把校验和写入包在一个事务里任何一步失败就回滚避免半截数据。下面是一个可抄的写入函数。import sqlite3 from datetime import datetime def add_transaction(conn, account_id, category_id, amount, kind, happened_on, note): 写入一笔流水并同步重算账户余额 # 1. 基础校验 if amount 0: raise ValueError(金额必须大于 0) try: datetime.strptime(happened_on, %Y-%m-%d) except ValueError: raise ValueError(日期格式应为 YYYY-MM-DD) cur conn.cursor() # 2. 校验分类方向是否与流水方向一致 cur.execute(SELECT kind FROM categories WHERE id ?, (category_id,)) row cur.fetchone() if not row: raise ValueError(分类不存在) if row[0] ! kind: raise ValueError(f分类方向为 {row[0]}与流水方向 {kind} 不一致) # 3. 写入并重算余额 cur.execute( INSERT INTO transactions (account_id, category_id, amount, kind, happened_on, note) VALUES (?, ?, ?, ?, ?, ?) , (account_id, category_id, amount, kind, happened_on, note)) conn.commit() recalc_balance(conn, account_id) return cur.lastrowid逻辑说明第 2 步的分类方向校验是很多人漏掉的结果出现「支出记到了收入分类下」月度报表直接翻车。第 3 步先 commit 再重算余额是因为重算函数内部也会 commit分开写更清晰。参数kind只接受income或expense转账场景在外面拆成两次调用。注意如果你用连接池或长连接记得每次操作后 commitSQLite 默认不会自动提交。另外happened_on不要用datetime.now()直接塞补录场景必须让用户传日期。3.2 月度统计 SQL 怎么写才不重不漏统计是财务系统的灵魂也是最容易写出「数字对不上」的地方。常见需求某月总收入、总支出、结余、各分类占比。我一般用一条 SQL 出总账再用一条出分类明细避免在 Python 里循环累加。-- 月度总览收入、支出、结余 SELECT SUM(CASE WHEN kind income THEN amount ELSE 0 END) AS total_income, SUM(CASE WHEN kind expense THEN amount ELSE 0 END) AS total_expense, SUM(CASE WHEN kind income THEN amount ELSE -amount END) AS net FROM transactions WHERE happened_on 2025-01-01 AND happened_on 2025-02-01; -- 分类占比只看出账按分类汇总 SELECT c.name, SUM(t.amount) AS cat_total FROM transactions t JOIN categories c ON c.id t.category_id WHERE t.kind expense AND t.happened_on 2025-01-01 AND t.happened_on 2025-02-01 GROUP BY c.id ORDER BY cat_total DESC;逻辑说明日期范围用左闭右开 月初 AND 次月初比BETWEEN更安全避免月底 23:59:59 这种边界漏记。分类占比只查 expense收入分类单独出别混在一起算百分比。net字段直接 SQL 算好Python 里不用再减。参数上月份边界建议在 Python 里算好再传别在 SQL 里用strftime拼跨年时容易写错。如果你要支持「月度起始日不是 1 号」这种需求把边界计算封装成一个get_month_range(year, month, start_day)函数统一调用。3.3 导出 CSV 与备份别等数据丢了才后悔本地系统最大的风险不是代码 bug是硬盘挂了或者误删库。文档里往往不提备份但这是血泪经验。我一般加两个功能一键导出当月流水为 CSV以及每次启动时自动复制一份 db 文件到backup/目录按日期命名。import csv, shutil, os from datetime import datetime def export_month_csv(conn, year, month, out_path): 导出指定月份流水为 CSV方便用表格软件二次分析 start f{year}-{month:02d}-01 end f{year}-{month1:02d}-01 if month 12 else f{year1}-01-01 cur conn.cursor() cur.execute( SELECT t.happened_on, a.name, c.name, t.kind, t.amount, t.note FROM transactions t JOIN accounts a ON a.id t.account_id JOIN categories c ON c.id t.category_id WHERE t.happened_on ? AND t.happened_on ? ORDER BY t.happened_on , (start, end)) with open(out_path, w, newline, encodingutf-8-sig) as f: writer csv.writer(f) writer.writerow([日期, 账户, 分类, 方向, 金额, 备注]) writer.writerows(cur.fetchall()) def backup_db(db_path, backup_dirbackup): 启动时备份数据库保留最近 30 份 os.makedirs(backup_dir, exist_okTrue) stamp datetime.now().strftime(%Y%m%d_%H%M%S) shutil.copy2(db_path, os.path.join(backup_dir, ffinance_{stamp}.db)) # 清理旧备份只留最近 30 份 files sorted(os.listdir(backup_dir)) for old in files[:-30]: os.remove(os.path.join(backup_dir, old))逻辑说明CSV 用utf-8-sig编码Excel 打开不乱码。备份用copy2保留元数据按时间戳命名避免覆盖。清理逻辑只留最近 30 份防止备份目录撑爆磁盘。参数上out_path建议默认放到用户桌面或文档目录别塞在程序安装目录里权限容易出问题。备份目录如果和 db 同盘硬盘挂了照样丢有条件就同步到另一个盘或云盘——但别用需要特殊网络环境的方案本地同步盘足够。4. 避坑与排查那些文档不会告诉你的翻车现场4.1 金额用 float 导致对不上账现象月度统计出来总收入 1000.00各分类加起来 999.99差一分钱。原因SQLite 的 REAL 和 Python 的 float 都是浮点数0.1 0.2 不等于 0.3 这种经典问题在财务场景会被放大。解决金额统一用整数存「分」显示时再除以 100。建表时amount INTEGER写入前int(round(amount * 100))统计完再转回元。如果已经用 float 存了数据写一个迁移脚本逐条转换别直接改字段类型。4.2 删除账户后流水变孤儿现象删掉一个不用的账户结果月度报表里出现一堆「未知账户」的流水总额对不上。原因外键约束没开或者开了但没设级联删除。解决SQLite 默认不启用外键连接后必须执行PRAGMA foreign_keys ON;。删除账户前先检查是否有流水有就提示用户先转移或删除流水别直接级联删财务数据不能悄悄消失。4.3 日期字符串比较在跨年时出错现象查 2024 年 12 月数据把 2025 年 1 月的也带出来了。原因日期存成2024-12-1这种不补零的格式字符串比较时2024-12-1大于2024-12-01排序和范围查询全乱。解决写入前强制datetime.strptime再strftime(%Y-%m-%d)保证月、日补零。已有脏数据用 SQL 批量修UPDATE transactions SET happened_on date(happened_on);。4.4 分类改名后历史统计对不上现象把「餐饮」改成「吃饭」之前几个月的分类占比里「餐饮」消失了新名字下只有改后的数据。原因统计时按分类名 group by而不是按分类 id。解决所有统计 SQL 一律GROUP BY c.id显示时再 join 出当前名称。分类名只是标签id 才是身份。如果非要保留历史名称加一个name_history表但本地系统没必要改就改了。4.5 并发写入导致 database is locked现象一边跑统计脚本一边在界面里记账偶尔报sqlite3.OperationalError: database is locked。原因SQLite 默认写锁是排他的两个连接同时写就冲突。解决本地单用户场景把连接设成check_same_threadFalse并加一个全局锁或者干脆所有写操作走同一个连接。别用多线程同时写 SQLite得不偿失。如果确实要并发换 PostgreSQL但个人财务系统真没必要。5. 进阶技巧把 docx 里的设计变成可维护的代码5.1 用配置文件管理分类和账户初始数据文档里通常会给一套默认分类比如「餐饮、交通、购物、工资、理财」。别把这些硬编码在 Python 里抽到一个seed.json启动时检查数据库是否为空空则导入。这样用户想改默认分类改 JSON 就行不用动代码。{ accounts: [ {name: 现金, type: cash}, {name: 工资卡, type: bank} ], categories: [ {name: 餐饮, kind: expense}, {name: 交通, kind: expense}, {name: 工资, kind: income}, {name: 理财收益, kind: income} ] }逻辑说明启动时读 JSON遍历插入用INSERT OR IGNORE避免重复。参数上type和kind要和建表时的 CHECK 约束一致否则插入报错。5.2 加一层简单的命令行交互别急着上 GUI很多人一上来就想用 tkinter 或 PyQt 画界面结果卡在布局上核心逻辑反而没写完。我建议先用argparse或click做一个命令行版本能跑通「添加、查询、统计、导出」四个命令再考虑套界面。命令行版本也是最好的测试入口自动化脚本可以直接调。import argparse def main(): parser argparse.ArgumentParser(description个人财务管理命令行) sub parser.add_subparsers(destcmd) p_add sub.add_parser(add) p_add.add_argument(--account, requiredTrue) p_add.add_argument(--category, requiredTrue) p_add.add_argument(--amount, typefloat, requiredTrue) p_add.add_argument(--kind, choices[income, expense], requiredTrue) p_add.add_argument(--date, requiredTrue) p_add.add_argument(--note, default) p_stat sub.add_parser(stat) p_stat.add_argument(--year, typeint, requiredTrue) p_stat.add_argument(--month, typeint, requiredTrue) args parser.parse_args() # 根据 args.cmd 分发到对应函数这里省略具体调用 print(命令解析完成:, args.cmd) if __name__ __main__: main()逻辑说明argparse的choices直接限制kind取值省掉手动校验。requiredTrue让缺参时自动报错不用自己写提示。参数名用--account而不是-a可读性更好本地工具不用省那几个字符。5.3 验证方法用一组已知数据跑回归写完别急着用真实数据先造一组测试数据3 个账户、5 个分类、20 笔流水手动算好总收入和总支出然后跑统计 SQL 对答案。我习惯把预期值写在一个test_expected.json里每次改完统计逻辑就跑一遍对比。这比肉眼盯报表靠谱得多。验证项预期值检查方式总收入15000.00月度总览 SQL总支出8230.50月度总览 SQL结余6769.50总收入减总支出餐饮占比32.1%分类占比 SQL账户余额合计6769.50各账户余额求和注意测试数据里的金额用整数分存储预期值也换算成分再比避免浮点误差。每次改完recalc_balance或统计 SQL先跑这张表全绿了再碰真实数据。从那以后我每次拿到这类文档型资源都强制自己先跑一遍最小验证集再往里加功能。文档给的是骨架血肉得自己填但填之前先确认骨架没歪。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

CentOS 6.X 离线部署 MongoDB 4.0 实战:兼容 CentOS 7.X 的完整指南

CentOS 6.X 离线部署 MongoDB 4.0 实战:兼容 CentOS 7.X 的完整指南

1. 为什么现在还有人要在 CentOS 6.X 上装 MongoDB 4.0先把话说在前头:CentOS 6 早就停止官方维护了,MongoDB 4.0 也不是什么新版本。但现实情况是,不少工厂产线、医院内网、政企离线环境里跑着的还是 CentOS 6.5 到 6.9 这一批老机器&#x…

2026/10/13 13:37:33 阅读更多 →
甲骨文图符提取全链路:边缘检测、多边形拟合与文字分割实战

甲骨文图符提取全链路:边缘检测、多边形拟合与文字分割实战

简介:这份资源面向数字图像处理研究人员、古文字与文物保护方向的技术爱好者,围绕甲骨文图符提取这一具体课题,提供了一套基于Matlab的完整实验方案。内容涵盖边缘检测与质心定位、图像校正、背景去噪、形态学处理、二值化、多边形拟合以及文…

2026/10/13 13:37:36 阅读更多 →
蓝桥杯分糖果模拟题:环形数组与奇偶补糖的Java实现

蓝桥杯分糖果模拟题:环形数组与奇偶补糖的Java实现

1. 这道题到底在考什么分糖果这道题在蓝桥杯历届试题里算是很经典的一道模拟题,我第一次做的时候觉得逻辑挺简单,但真正动手写才发现坑不少。题目大意是这样的:有n个小朋友围成一圈坐,每人初始有一定数量的糖果。每一轮&#xff0…

2026/10/13 13:37:42 阅读更多 →

最新新闻

风电水电联合调度优化算法与工程实践

风电水电联合调度优化算法与工程实践

1. 项目背景与核心价值去年参与某省级电网清洁能源消纳项目时,我第一次接触到风-水联合调度这个课题。当时面对风电出力的强随机性和水电调节的滞后性,团队在制定优化运行方案时遇到了不少挑战。这个经历让我深刻认识到:在双碳目标下&#xf…

2026/10/14 2:21:24 阅读更多 →
从PowerDesigner迁移到PDMan:开源数据库建模与Git版本管理实践

从PowerDesigner迁移到PDMan:开源数据库建模与Git版本管理实践

1. 为什么我最终把数据库建模从商业软件迁到了PDMan做后端开发时间长了,数据库建模这件事几乎绕不开。早些年团队里清一色用PowerDesigner,画物理模型、生成DDL、导出字段文档,一套流程走下来确实顺手。但问题也很明显:正版授权费…

2026/10/14 2:21:24 阅读更多 →
微信小程序仿智行火车票开发实战:云开发+数据离线化方案

微信小程序仿智行火车票开发实战:云开发+数据离线化方案

简介:本资源是一套完整的微信小程序仿智行火车票12306系统实战项目,面向Java后端与小程序前端初学者及全栈学习者,聚焦铁路订票核心业务场景,涵盖用户查询、车次管理、订单生成等全流程功能实现。项目采用SSM(SpringSp…

2026/10/14 2:21:23 阅读更多 →
RTMP Flash播放插件替代方案:flv.js迁移实战与参数调优

RTMP Flash播放插件替代方案:flv.js迁移实战与参数调优

简介:这份资源是面向需要在网页中播放RTMP流媒体的开发者与运维人员的一套Flash播放插件实现方案,核心解决旧系统或特定场景下通过Flash技术播放RTMP直播、点播流的问题。压缩包共5个文件,约1.15MB,包含2个swf播放器与安装检测组件…

2026/10/14 2:21:23 阅读更多 →
AI编程助手代码质量救星:TypeScript静态类型约束实战

AI编程助手代码质量救星:TypeScript静态类型约束实战

AI 编程助手越帮越乱,这个话题我最近真的是感同身受。我们团队接入 AI 编程助手之后,合并请求里的代码量倒是上去了,可编译期错误非但没减少,反而冒出来一批"语法完全合法、类型对不上、一跑就崩"的代码。后来大家坐下来…

2026/10/14 2:21:23 阅读更多 →
LaTeX 2025环境配置:texlive + TeXstudio

LaTeX 2025环境配置:texlive + TeXstudio

文章目录Latex2025环境配置一、LaTeX 简介1.1 什么是 LaTeX?1.2 为什么使用 LaTeX?1.3 如何开始使用 LaTeX?二、texlive下载安装2.1 texlive下载2.2 texlive安装2.3 常见问题2.3.1 用管理员权限打开install-tl-windows.bat 报错2.3.2 Latex安…

2026/10/14 2:20:23 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →