使用genanki创建anki抽认卡的Python脚本(预期str实例,dict发现错误)

2024-05-23 23:06:15 发布

您现在位置:Python中文网/ 问答频道 /正文

程序使用pandas在名为“list”的excel文件的第一列中获取一个英文单词列表,该列的标题是“words”,单词位于“Sheet1”中。在

然后,这些单词被存储为一个字符串列表。在

PyDictionary和{a3}是通过创建字典翻译器来使用的,其中翻译调用翻译器,以便将列表中的单词翻译成目的地语言“丹麦语”。在

然后创建一个简单的for循环,在这个循环中,翻译单词列表中的每一个翻译都会打印出它的来源->目的地和定义。在

如下代码所示:

from googletrans import Translator
import pandas as pd
from PyDictionary import PyDictionary

# Load excel file and parse the list of words as strings
file_location = "/Users/.../List.xlsx"
xl_workbook = pd.ExcelFile(file_location)
df = xl_workbook.parse("Sheet1")
aList = df['words'].tolist()
[str(i) for i in aList]

# Use PyDictionary to load definitions of words
dictionary = PyDictionary()

# Translate the list of strings into target language and give definitions
translator = Translator()
translations = translator.translate(aList, dest='da')

# Simple for-loop printing the words
for translation in translations:
    print(
        translation.origin, ' -> ', translation.text,
        dictionary.meaning(translation.origin)
    )

这个程序实际运行并产生了我希望的结果。但是,问题发生在下一步,如下所述:

我想把单词输入我最喜欢的闪存卡程序Anki。Anki是用Python编写的,有一个名为Genanki的联合国官方发行版。然而,这是我遇到问题的时候。在

现在,我在上面的代码中添加了以下4项内容:

  1. 我定义了genanki提出的我的_模型,并创建了一个简单的抽认卡模型。这包括一个随机的硬编码号码(Anki需要)、模型的名称、一些字段和卡片类型的模板。在
  2. 我把“我的”牌组定义为带有硬编码随机数和名称的特定卡片组。在
  3. 我更改了for循环,现在将转换和定义直接运行到名为aNote的变量中,该变量由genanki.注操作员在每次将注释添加到my峎deck时迭代翻译。在
  4. 我写我的anki文件,我可以用anki打开。在

这可以在下面的代码中看到:

^{pr2}$

这段代码也能很好地执行,并生成一个可以在Anki中打开的文件,然后卡片在抽认卡的前面显示原始单词,在背面显示翻译。在

我的问题

为了完成我的项目,我希望在翻译的每张卡片的背面添加一个定义。我原本以为我只需要更正我的模型=genanki模型(…)变量,通过添加另一个字段,这样我就可以添加字典。意思(翻译.来源)到for循环中的注释生成器。在

然而,当我试图添加定义以确保它们顺利运行时,我遇到了问题。考虑以下代码:

for translation in translations:
    aNote = genanki.Note(
        model=my_model, fields=[translation.origin,
                                dictionary.meaning(translation.origin)
                                ]
    )
    my_deck.add_note(aNote)

我希望卡片像往常一样打印,在正面显示原始单词,在背面显示定义,但是使用for循环运行完整代码会导致以下错误:

Error: The Following Error occured: list index out of range
Error: The Following Error occured: list index out of range
Error: The Following Error occured: list index out of range
Error: A Term must be only a single word
Error: A Term must be only a single word
Error: A Term must be only a single word
Error: A Term must be only a single word
Error: A Term must be only a single word
Error: The Following Error occured: list index out of range
Error: A Term must be only a single word
Error: A Term must be only a single word
Error: The Following Error occured: list index out of range
Error: The Following Error occured: list index out of range
Error: The Following Error occured: list index out of range
Error: A Term must be only a single word
Error: A Term must be only a single word
Error: A Term must be only a single word
Error: A Term must be only a single word
Error: A Term must be only a single word
Error: A Term must be only a single word
Error: The Following Error occured: list index out of range
Error: A Term must be only a single word
Error: The Following Error occured: list index out of range
Traceback (most recent call last):
  File "/Users/Lehmann/Desktop/XYZ/Programming/Translator/TranslatorProgramv3.py", line 51, in <module>
    '/Users/Lehmann/Desktop/XYZ/Programming/Translator/TestV3v1.apkg')
  File "/anaconda3/lib/python3.6/site-packages/genanki/__init__.py", line 313, in write_to_file
    self.write_to_db(cursor, now_ts)
  File "/anaconda3/lib/python3.6/site-packages/genanki/__init__.py", line 331, in write_to_db
    deck.write_to_db(cursor, now_ts)
  File "/anaconda3/lib/python3.6/site-packages/genanki/__init__.py", line 267, in write_to_db
    note.write_to_db(cursor, now_ts, self.deck_id)
  File "/anaconda3/lib/python3.6/site-packages/genanki/__init__.py", line 228, in write_to_db
    self._format_fields(),        # flds
  File "/anaconda3/lib/python3.6/site-packages/genanki/__init__.py", line 240, in _format_fields
    return '\x1f'.join(self.fields)
TypeError: sequence item 1: expected str instance, dict found

我怀疑是“Expected str instance,dict found”这一部分给我带来了麻烦,然而,这是我的第一个python项目,我不是程序员,所以我希望有人能帮助我理解这个问题。在

BR公司

米克尔


Tags: oftheinonlyindexerrorbelist