感谢我们敬爱的katie的倾囊相与!
(一直想把katie的听写格式化一下,做成anki卡组,最近终于是厚着脸皮去要了来: -D
文件链接在文尾 )
关于anki
这里用python-pptx库读取pptx内容
代码如下
所有的过程解释均在代码中
import pptx
f=open("6.13pptx_try_out.txt","w")
def mainprocess():
count=0
fp="Dictation.pptx"
presentation = pptx.Presentation(fp)
#print(presentation.slides)
slides_list = presentation.slides
#slides是所有幻灯片的集合,可以用列表的形式表示
shapes_list=[]
#shapes_list为所有幻灯片中shapes的集合
for i in slides_list:
shapes_list.append(i.shapes)
#print(shapes_list)
for ii in range(len(shapes_list)):
i = shapes_list[ii]
# 到达每张幻灯片的形状树,i代表形状树
result_list=[[],[],'']#[中文列表,英文列表,目录信息]
add=''
for k in i:
#遍历某张幻灯片中的形状树内容,k表示形状
if not(k.text[:9]=="Dictation"):#跳过无用的标题 Dictation XX
#print(k)
#print(k.shape_type)
#print(k.text)
#print(len(k.text))
#print("这是",end="")
#print(ChorEn)
#从文本框中取出元素
if k.shape_type == 14:#判断是否为PLACEHOLDER(目录信息所在)
#print("tags= "+ k.text)
result_list[2]=k.text
#print(result_list)
else:
ChorEn = is_c(k.text) # 文本框的中/英情况
add = add + " " + str(ChorEn - 1) # 计数,中文-1,英文0
#print("不是目录耶")
if k.has_text_frame:#形状中是否含有文本框
#print("有frame")
for para in k.text_frame.paragraphs:
part = para.text
#print("ta是:",end="")
#print(part)
if part != "":
result_list[ChorEn].append(part)
#print("加入成功")
#print(result_list)
#print(add)
Yes_ok=(len(result_list[0])==len(result_list[1]))
if Yes_ok == True:
print("------")
for i in range(len(result_list[0])):
f.writelines(result_list[2] + "#" + result_list[0][i] + "#" + result_list[1][i] + "\n" )
else:
print("------")
print("Error! Index="+str(ii))
for i in result_list:
for t in i:
print(t)
print(result_list[2])
print("len1="+str(len(result_list[0]))+" len2=" + str(len(result_list[1])))
print("add=",end="")
print(add)
print()
count+=1
print(count)
#print(shape1[0].has_text_frame)
def is_english_char(ch):
#判断单个字符是否是英文字符或数字
t= ord(ch)
if t>=1 and t <=127:
#英文
return 1
else:
#中文
return 0
def is_c(stt):
#判断是否主要为为中文
ad=0
k=len(stt)
for i in range(k):
ad = ad + is_english_char(stt[i])
print("ad=",end="")
print(ad)
print("k=",end="")
print(k)
addd=0
for i in range(2):
addd=addd+is_english_char(stt[i])
if ad/k <= 0.6 or addd == 0 :
#较少出现英文,或前两个全为英文,则为中文
return 0
else:
#出现英文则为英文
return 1
if __name__ == '__main__':
mainprocess()
一开始运行出来79个报错,瞬间自闭。经仔细观察调试,其中动词变位题占了绝大多数

后来几经波折,最终将报错降到0个,其时喜悦之至

但还是存在很多问题:模块化不够彻底,逻辑不清晰,对问题的解析不够到位等
不过好歹能完成任务了
出结果txt
将其导入anki中

导入时发现了一些有意思的事情,也暴露了程序不完善之处,同时看到了anki的bug:导入文件间隔符号前为空的行会被跳过(还有字符串拼接的低级错误 >_<|||)

经修正,卡片数恢复正常
文件链接:
链接:http://ctbfl.xyz
cKey为katie的中文名

2584

被折叠的 条评论
为什么被折叠?



