题记:在一个拿着锤子的人眼里,所有的东西都是钉子。

如果老师要制作词卡让学生去背词,有很多好用的工具。比如Quizlet,Tinycards,Anki等等。我用的就是Quizlet。

Quizlet:相当赞的背词工具

但词表是本地文件,如果要一个一个填到词卡里,非常浪费时间。所以Quizlet有个功能支持直接从word、excel导入。

支持word/excel导入

但本地的词表往往是总词汇表,而放到Quizlet上的其实是需要一课一课分开的。这样可以随着教学进度,让学生去单独背诵某一课的生词。可惜Quizlet并不提供切分词表的功能。

所以我就灵机一动,最近不正好在学python么,正好能解决这样的问题。激动之余,二话没说就动手写起代码来了。

旁边的同事看到了还夸我:还以为你是技术部的呢。

我简直是天才!

词表的原格式是excel,样式是这样的:拼音--第几课--英文解释

没有汉字。因为初级学生暂时不需要汉字

要用python完成的工作是这样的:

首先新建第一课的xlsx文件

判断第一个生词是不是第一课的生词。如果是,读取该生词的拼音和英文,以数组的形式写入一个列表,读取下一个生词。循环到把所有第一课生词都遍历。

新建第二课的xlsx文件

同第二步骤

实际操作起来有一些坑,比如刚开始的时候不知道怎么操作excel文件,包括新建、读取、建立工作表、读取单元格数据等等。好在凭着我惊人的智慧和网上大牛的教程,一点点把缺失的技能都补全了。

最后的代码是这样的:

#!usr/bin/env Python
# coding = utf-8
import xlrd
import xlsxwriter
data_input = xlrd.open_workbook('/Users/Arthur/learnPython/vocabulary/vocabulary list.xlsx')
table_input = data_input.sheets()[0]
row1 = 0
col1 = 1
for lesson_num in range(1,16):
data_output = xlsxwriter.Workbook('/Users/Arthur/learnPython/vocabulary/result/lesson%s_vocab.xlsx' %lesson_num)
table_output = data_output.add_worksheet()
row2 = 0
col2 = 0
for row1 in range(164):
cell_B1 = table_input.cell(row1,col1).value
if cell_B1 == lesson_num:
item1 = table_input.cell(row1,0).value
cost1 = table_input.cell(row1,2).value
table_output.write(row2,col2, item1)
table_output.write(row2,col2+1, cost1)
row2 = row2 + 1
data_output.close()

是不是很简洁很优雅充满了数学的美感?

运行完代码之后,总的词汇表就被分成了若干课。现在分课的词汇表是这样的:

分课词汇表

万事具备,现在只要将文件一个一个上传到Quizlet就有分课的词卡啦。我按耐不住激动的心情,打开了Quizlet的网页,发现了一个残酷的事实:Quizlet并没有上传文件的功能。

Are you kidding me?

我又仔细看了一遍文案说明,发现人家说的很清楚,是复制数据,复制数据,复制数据:

复制数据

折腾了一整天,结果还不如直接一课一课生词复制,哎。