You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Anki导出卡片评分与时间至CSV插件安装失败及功能异常求助

修复Anki评分导出CSV插件的安装与运行问题

我开发了一款可将Anki卡片评分及评分时间导出为CSV文件的插件,在anki-review_results文件夹中存放了空的__init__.py、anki_rating_time_record.py及manifest.json文件,压缩后改为.ankiaddon扩展名,安装时却报错:

"An error occurred during the installation of anki-review-results.ankiaddon: Invalid add-on manifest."

当前使用Anki版本为2.1.58,以下是具体修复方案:


一、修复manifest.json的格式与内容错误

安装报错的核心原因是manifest.json存在语法和内容错误,修正后的完整内容如下:

{
    "id": "anki-review-results",
    "version": "0.1",
    "name": "Anki Review Results",
    "description": "Save the results of your Anki reviews in a CSV file",
    "author": "Shohei",
    "addonType": "background",
    "minimumAnkiVersion": "2.1.0",
    "files": ["anki_rating_time_record.py", "__init__.py"]
}

具体修正点:

  • 补全minimumAnkiVersion行末尾的逗号,修复JSON语法错误
  • 修正files数组中的文件名:_init_.py改为__init__.py,Anki_rating_time_record.py改为与实际文件一致的anki_rating_time_record.py
  • 将addonType的数组格式改为字符串格式,符合Anki 2.1.58的插件规范

二、修复anki_rating_time_record.py的代码错误

原代码使用了错误的API和逻辑,完全不符合Anki插件开发规范,修正后的完整代码如下:

from aqt import mw
from aqt.utils import showInfo
import csv
import datetime
from pathlib import Path

# 初始化评分记录存储列表
review_results = []

def on_card_answered(card, ease):
    # 获取当前时间戳
    now = datetime.datetime.now()
    # 将ease值转换为对应的评分文本(1=Again,2=Hard,3=Good,4=Easy)
    result = ["Again", "Hard", "Good", "Easy"][ease-1]
    # 存储记录:时间、评分结果、卡片ID、ease值
    review_results.append((now, result, card.id, ease))

# 注册卡片回答完成的回调函数
mw.reviewer.card_did_answer.connect(on_card_answered)

def save_review_results():
    # 获取插件专属数据目录,确保目录存在
    data_dir = Path(mw.pm.addonFolder()) / "anki-review-results"
    data_dir.mkdir(exist_ok=True)
    csv_path = data_dir / "review_results.csv"
    
    # 写入CSV文件,指定UTF-8编码避免乱码
    with open(csv_path, "w", newline="", encoding="utf-8") as f:
        writer = csv.writer(f)
        writer.writerow(["timestamp", "result", "card_id", "ease"])
        for entry in review_results:
            writer.writerow([
                entry[0].strftime("%Y-%m-%d %H:%M:%S"),
                entry[1],
                entry[2],
                entry[3]
            ])
    showInfo(f"评分记录已保存到:{csv_path}")

# 添加菜单选项,让用户手动触发导出操作
action = mw.form.menuTools.addAction("导出评分记录到CSV")
action.triggered.connect(save_review_results)

具体修正点:

  • 替换错误的anki_python_api导入,改用Anki官方的QT开发API
  • 修复无效的Anki = anki_python_api.语法行
  • 使用Anki原生的card_did_answer信号注册回调,替代错误的回调方式
  • 修正循环中的变量名错误,调整元组存储顺序与CSV表头对应
  • 改用插件专属目录存储CSV文件,避免路径混乱
  • 添加手动导出的菜单选项,方便用户控制导出时机

内容的提问来源于stack exchange,提问作者Semayuki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 08:56:07