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

如何通过编程将文本文件导入Anki?插件开发新手求助

Hey there! First off, great job getting to the point where you’ve got a properly formatted text file—half the battle is already won as a first-time Anki add-on dev. Let’s walk through exactly how to import that file into an existing deck using Anki’s built-in Python API, which will save you from reinventing the wheel.

Core Context

Anki’s add-on environment gives you direct access to its internal collection (database) and import utilities—you don’t need to write custom parsing logic for your text file. The TextImporter class is specifically designed to handle this use case, and it works seamlessly with existing decks.


Step-by-Step Implementation

1. Access Anki’s Core Objects

First, you’ll need to import the key modules available to every Anki add-on:

  • mw: The main Anki window instance, which gives you access to the user’s active collection (mw.col).
  • TextImporter: The built-in tool for parsing and importing text-based note files.

2. Target Your Existing Deck

You’ll need to fetch the ID of the deck you want to import into. Anki identifies decks by their unique id field, which you can retrieve using the deck’s name.

3. Configure the Importer

Point the TextImporter at your formatted text file, set the target deck ID, and tweak any optional settings (like field mappings or separators) if needed.

4. Run the Import & Save Changes

Execute the import, save the collection to disk, and refresh the Anki UI to show the new notes.


Full Working Code Example

Here’s a complete, commented snippet you can adapt for your add-on:

from anki.importing import TextImporter
from aqt import mw  # Main window instance, auto-available to add-ons
from aqt.utils import showWarning  # For user-facing error messages

def import_text_to_existing_deck(text_file_path, target_deck_name):
    try:
        # Fetch the target deck by name
        target_deck = mw.col.decks.by_name(target_deck_name)
        if not target_deck:
            showWarning(f"Error: Deck '{target_deck_name}' doesn't exist!")
            return

        # Initialize the text importer with your file and collection
        importer = TextImporter(mw.col, text_file_path)

        # Set the target deck's unique ID (required to assign notes correctly)
        importer.did = target_deck["id"]

        # Optional: Customize settings if needed
        # - If your file uses commas instead of tabs: importer.separator = ","
        # - Map text columns to note fields (e.g., col 0 → Front, col1 → Back):
        #   importer.field_map = {0: 0, 1: 1}

        # Execute the import
        importer.run()

        # Save changes to the collection and refresh the UI
        mw.col.save()
        mw.reset()

        # Let the user know it worked!
        showWarning(f"Success! Imported {importer.total} notes into '{target_deck_name}'.")
    
    except FileNotFoundError:
        showWarning(f"Error: Couldn't find the file at {text_file_path}")
    except Exception as e:
        showWarning(f"Import failed: {str(e)}")

# Example usage (replace with your file path and deck name)
# import_text_to_existing_deck("/Users/you/Documents/anki_notes.txt", "My Vocab Deck")

Key Tips for First-Time Devs

  • Test with a throwaway deck: Always test imports on a dummy deck first to avoid accidentally messing up your main collection.
  • Encoding matters: Ensure your text file is saved as UTF-8—Anki’s importer expects this, and other encodings can cause weird character issues.
  • Check the importer’s attributes: After running importer.run(), you can access importer.total (total notes found) and importer.added (notes actually added, excluding duplicates) to track success.

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:42:51