首页 编程教程正文

使用python3 生成 Anki 单词记忆牌库

piaodoo 编程教程 2020-02-22 22:16:11 1677 0 python教程

本文来源吾爱破解论坛

简单的使用genanki 这个库即可 我的做法是所有的单词存在一个excel中 第一列是单词 第三列是释义   其实只需要 有一个单词也就是内容列表即可

import genanki
import xlrd
from get_text import get_txt
from get_media import get_mp3

my_deck = genanki.Deck(
    2059400110,
    '英语(二) 4500单词')

# anki 的牌model 可以根据自己的想法设置
my_model = genanki.Model(
    1091735104,
    'Simple Model with Media',
    # 这里是传入fields 的变量代名
    fields=[
        {'name': 'Question'},
        {'name': 'Answer'},
        {'name': 'MyMedia'},
        {'name': 'Text'}# ADD THIS
    ],
    # 直接将你传入的 变量 通过代名 写入模版 html还是很好理解的
    templates=[
        {
            'name': 'Card 1',
            'qfmt': '{{Question}}<br>{{MyMedia}}',  # AND THIS
            'afmt': '{{FrontSide}}<hr id="answer">{{Answer}}<hr id="text">{{Text}}',
        },
    ])

def read_xlsx():
    workbook = xlrd.open_workbook("4500.xlsx")
    Words = workbook.sheet_by_name("Sheet1")
    rows = Words.nrows
    word_list  = []

    # 便利了excel中 第一行 所有的单词
    for x in range(0,rows):
        # 对 带有/ 的双词  及 带有 ()的情况做丢弃处理
        word_str = Words.row(x)[0].value.split('(')[0].split('/')[0]

        # 中文释义 是第三列的内容
        answer  = Words.row(x)[2].value

        # 获取例句
        text_list = get_txt(word_str)

        text = ''
        for x in text_list:
            text += "<br>" + x
        my_note = genanki.Note(
            model=my_model,
            # 变量传入牌面
            #     fields=[
            #         {'name': 'Question'},
            #         {'name': 'Answer'},
            #         {'name': 'MyMedia'},
            #         {'name': 'Text'}# ADD THIS
            #     ],
            # 依次传入 sound 只要传入该文件名即可 这个是在anki的内部对封装在apkg内的音频调用  不用有本机路径
            fields=[word_str, answer, f'[sound:{word_str}.mp3]', text])

        # 获取音频
        filepath = get_mp3(word_str)
        if filepath:
            # 文件路径的列表
            word_list.append(filepath)

        print(word_str)
        my_deck.add_note(my_note)
    print('list:', word_list)
    my_package = genanki.Package(my_deck)

    # 这里才是音频压入apkg的地方 将所有音频文件路径 传入anki
    my_package.media_files = [ x for x in word_list]
    print(my_package.media_files)
    my_package.write_to_file("4500.apkg")

if __name__ == '__main__':
    read_xlsx()

另外的 音频和 例句接口  文件名 get_media.py

import os
import traceback
import requests
from pyquery import PyQuery as pq

def get_txt(word):
    api = f"http://dict.kekenet.com/en/{word}"
    try:
        resp = requests.get(api, timeout=10)
        if resp.status_code == 200:
            html = resp.content
            doc = pq(html)
            return doc.find("#s_ul").text().split('\n')
    except:
        print("请求出错!")
        traceback.print_exc()
        return ["无例句", "无例句"]

def get_mp3(word):
    api = f"http://media.shanbay.com/audio/us/{word}.mp3"
    filepath = f"./mp3/{word}.mp3"
    try:
        if not os.path.exists(filepath):
            res = requests.get(api, timeout=5)
            if res.status_code == 200:
                with open(filepath, "wb") as file:
                    file.write(res.content)
                return filepath
            else:
                print("获取失败 可能是单词拼写错误")
        else:
            return filepath
    except:
        print('下载mp3 请求出错')

if __name__ == '__main__':
    get_txt("america")

附上我生成的自考 00015 英语(二) 要求的4500单词 anki牌库 带音频和 例句
https://www.lanzous.com/i8bhlcj

版权声明:

本站所有资源均为站长或网友整理自互联网或站长购买自互联网,站长无法分辨资源版权出自何处,所以不承担任何版权以及其他问题带来的法律责任,如有侵权或者其他问题请联系站长删除!站长QQ754403226 谢谢。

有关影视版权:本站只供百度云网盘资源,版权均属于影片公司所有,请在下载后24小时删除,切勿用于商业用途。本站所有资源信息均从互联网搜索而来,本站不对显示的内容承担责任,如您认为本站页面信息侵犯了您的权益,请附上版权证明邮件告知【754403226@qq.com】,在收到邮件后72小时内删除。本文链接:http://www.piaodoo.com/8045.html

评论

搜索