上周安利了一個(gè)背書神器--anki衬横,并且挖了一個(gè)關(guān)于批量導(dǎo)入的坑飒责。這周在制作anki卡片特別是選擇題卡片的時(shí)候颁褂,也順便研究了一下anki的批量導(dǎo)入功能,得到了一些個(gè)人的經(jīng)驗(yàn)检盼,這里分享出來肯污。
各路大神的處理方法
在知乎上查看了很多大神分享的批量導(dǎo)入方法,比如:https://zhuanlan.zhihu.com/p/47965443?native.theme=0吨枉,這些方法大同小異蹦渣,基本上先用word的宏批量處理文檔,然后拷貝到excel中用插件處理貌亭,導(dǎo)出為utf8編碼的文檔柬唯,最后導(dǎo)入到anki中∑酝ィ可能是不太熟悉word宏的使用锄奢,感覺這套方法挺麻煩的,還要裝好幾個(gè)插件剧腻,于是我就想用python來處理一下拘央。
我的方法
我的題庫格式類似于下圖:
需要得到下面這樣的csv文件:
于是我就用如下python代碼處理:
import re
import pandas as pd
from io import StringIO
f = open('test.txt','r',encoding='utf-8')
lm=f.read()
#1把中文字符括號(hào)替換為英文字符括號(hào),2去掉換行符,3去掉空格书在,4去掉制表符
lm=lm.replace('(', '(').replace(')', ')').replace('\n', '').replace(" ", "").replace("\t","").strip()
#在選項(xiàng)A前加逗號(hào)
lm1=re.sub('A\.',',A.',lm)
#在題目號(hào)碼前加入換行符
new_string=re.sub('[1-9]?[0-9]\.',lambda x:"\r\n"+x.group(0),lm1)
#去掉空行
lm2=re.sub('^\r\n','',new_string)
df=pd.read_csv(StringIO(lm2),error_bad_lines=False,header=None)
#得到答案列
df['答案'] = df[0].str.extract('\((.*?)\)', expand=False)
#去除題目中的答案堪滨,得到題目列
def chuli1(x):
? ? return re.sub('\((.*?)\)','()',x)
df['題目'] = df[0].apply(chuli1)
#把各個(gè)選項(xiàng)之間插入換行符,得到選項(xiàng)列蕊温。
def chuli2(x):
? ? return re.sub('[B-Z]',lambda x:"\r\n"+x.group(0),x)
df['選項(xiàng)'] = df[1].apply(chuli2)
result=pd.DataFrame()
result['題目']=df['題目']
result['選項(xiàng)']=df['選項(xiàng)']
result['答案']=df['答案']
result['remark']='123'
result.to_csv('result.csv',encoding='utf-8-sig',index=False,header=None)
最終直接得到想要的文件袱箱,然后導(dǎo)入到anki中。
結(jié)語
因?yàn)槠綍r(shí)比較喜歡使用python义矛,可能這種方法對(duì)于我個(gè)人來說比較方便发笔,不一定適用于大多數(shù)人。另外值得一提的是凉翻,關(guān)于anki的使用方法很多了讨,但是最核心的東西還是去用它來記憶東西,而不是去玩這個(gè)工具制轰,這里給自己提個(gè)醒前计。