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

医学闪卡自动标签脚本报错:genanki无Collection属性求助

解决genanki无Collection属性报错及批量给Anki卡片加标签的方案

核心报错原因

genanki的设计定位是生成新的Anki卡组(.apkg文件),它没有提供读取本地已有的collection.anki2数据库的功能,所以genanki.Collection这个类根本不存在——这就是你报错的根源。

可行解决方案(针对批量操作本地13.6万张卡片)

方案1:使用Anki官方Python接口

Anki本身自带可操作collection的Python模块,步骤如下:

  1. 将Anki的安装目录(比如C:\Program Files\Anki)添加到Python的环境变量sys.path中
  2. 导入anki模块,使用anki.Collection来打开本地数据库

示例代码片段:

import sys
sys.path.append(r"C:\Program Files\Anki")
from anki.collection import Collection

# 打开本地collection
collection_path = r"C:\Users\Doug\AppData\Roaming\Anki2\Convertor\collection.anki2"
col = Collection(collection_path)

方案2:直接操作SQLite数据库(推荐批量操作)

collection.anki2本质是SQLite数据库,用sqlite3模块直接操作效率更高,适合处理13万张卡片的批量任务:

  1. 连接数据库
  2. 查询目标卡组的笔记ID
  3. 根据关键词匹配更新标签

示例代码片段:

import sqlite3
import re

# 连接数据库
conn = sqlite3.connect(r"C:\Users\Doug\AppData\Roaming\Anki2\Convertor\collection.anki2")
cursor = conn.cursor()

# 定义分类关键词
categories = {
    'diagnosis': ['diagnosis', 'symptoms', 'signs'],
    'treatment': ['treatment', 'management', 'therapy'],
    'anatomy': ['anatomy'],
    'physiology': ['physiology'],
    'pathology': ['pathology'],
    'pharmacology': ['pharmacology', 'drugs', 'medications'],
    'microbiology': ['microbiology', 'infectious'],
    'surgery': ['surgery', 'procedures', 'operative'],
    'radiology': ['radiology', 'imaging', 'scans'],
}

# 查询目标卡组的笔记(替换为你的卡组名称)
cursor.execute("SELECT id, flds FROM notes WHERE did = (SELECT id FROM decks WHERE name = '你的卡组名称')")
notes = cursor.fetchall()

for note_id, flds in notes:
    tags = set()
    # 检查字段内容是否匹配关键词
    for category, keywords in categories.items():
        for keyword in keywords:
            if re.search(keyword, flds, re.IGNORECASE):
                tags.add(category)
    # 更新笔记标签
    cursor.execute("UPDATE notes SET tags = ? WHERE id = ?", (','.join(tags), note_id))

conn.commit()
conn.close()

现有代码的其他关键错误修复

不管用哪种方案,你原代码里的这些错误必须修正:

  • 路径重复拼接:collection_path = os.path.join(anki_path, "C:\Users\Doug\AppData\Roaming\Anki2\Convertor\collection.anki2") 这里重复了绝对路径,直接用完整路径即可
  • 语法错误:tags.add(category) 少了括号,应改为tags.add(category)
  • 缩进错误:for url in urls:循环内的标签处理、后续的if url in existing_cards:判断都缩进错误,导致逻辑完全混乱
  • 变量名不一致:最后保存时用了col.decks.save(deck),但前面定义的是collection,变量名不匹配
  • 逻辑错误:existing_cards的键是note.fields[0],但后续判断url in existing_cards,如果fields[0]不是URL,这个判断永远不成立

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 16:43:18