吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 9062|回复: 27
收起左侧

[Python 转载] 使用python3 生成 Anki 单词记忆牌库

  [复制链接]
cOldpure 发表于 2019-12-28 15:47
本帖最后由 cOldpure 于 2020-2-26 09:48 编辑

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

import genanki
import xlrd
from get_media import get_txt, 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.lanzouj.com/i8bhlcj


免费评分

参与人数 9吾爱币 +9 热心值 +9 收起 理由
a90120411 + 1 + 1 谢谢@Thanks!
慕禾Yeah~ + 1 + 1 用心讨论,共获提升!
Time丨Brand + 3 + 1 我很赞同!
玄玄123 + 1 谢谢@Thanks!
xiongyong + 1 + 1 谢谢@Thanks!
酷酷的囍 + 1 谢谢@Thanks!
王星星 + 1 + 1 谢谢@Thanks!
yjn866y + 1 + 1 我很赞同!
威风的黑龙 + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

icehack 发表于 2020-2-19 00:41
本帖最后由 icehack 于 2020-2-19 00:50 编辑

from get_text import get_txt     
少了个get_text的源吗,编译报错

get_mp3, get_txt是不是都是引用get_media.py文件里的函数,我代码要改成下面的就不报错了
import genanki
import xlrd
# from get_text import get_txt
from get_media import get_mp3, get_txt
yjn866y 发表于 2019-12-28 16:22
毋庸讳言 发表于 2019-12-28 16:36
头像被屏蔽
王星星 发表于 2019-12-28 17:05
提示: 作者被禁止或删除 内容自动屏蔽
cj13888 发表于 2019-12-29 11:23

学习借鉴一下,谢谢分享
颠覆1 发表于 2019-12-29 16:39
求告知怎么使用
 楼主| cOldpure 发表于 2019-12-29 16:57

Anki 是一个记忆类软件  将生成的 apkg 直接导入即可
酷酷的囍 发表于 2020-1-3 23:20
楼主牛逼
 楼主| cOldpure 发表于 2020-2-26 09:53
icehack 发表于 2020-2-19 00:41
from get_text import get_txt     
少了个get_text的源吗,编译报错

是的 谢谢
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 16:30

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表