说明一下这里使用的百词斩是安卓7.6.11版本,导出的pdf模板为“经典单词本”。
使用python编写的程序,先从pdf复制文字到txt再运行程序,按照程序提示进行即可,运行程序后在同目录下找到加上后缀(newformat)的新txt文件,该文件可以直接导入anki。
代码
import re
import os
def transform_format(input_file):
# 读取输入文件内容
try:
with open(input_file, 'r', encoding='utf-8') as file:
content = file.read()
except FileNotFoundError:
print(f"文件 {input_file} 未找到,请检查路径是否正确。")
return
except Exception as e:
print(f"读取文件时发生错误: {e}")
return
# 1. 删除小字部分
content = re.sub(r'- \d{1,2}\n', '', content)
content = re.sub(r'\n?Classic Vocabulary List\nTitle: 收藏的单词\nDate: / /\n', '', content)
content = re.sub(r'No.\nWord\nMeaning\n', '', content)
# 2. 删除单词内换行
content = re.sub(r'([a-zA-Z])\n([a-zA-Z])\n([a-zA-Z])', r'\1\2\n\3', content)
# 3. 将换行符换成空格
content = re.sub(r'(\d)\n([a-zA-Z])', r'\1 \2', content)
content = re.sub(r'([a-zA-Z])\n([a-zA-Z])', r'\1 \2', content)
# 4. 删除释义内的多余空格和换行符
content = re.sub(r'\.\s+([^0-9])', r'.\1', content)
content = re.sub(r';\s+', ';', content)
content = re.sub(r'\n(\d)', r'\nxlb\1', content)
content = re.sub(r'\n', '', content)
content = re.sub(r'xlb', r'\n', content)
# 5. 提供删除数字的可选项
delete_number = input("第二步:是否删除单词前的数字(y删除,n或回车保留)?建议先保留数字便于与行数比较检查,检查过后再选择删除(y/n): ")
if(delete_number == 'y'):
content = re.sub(r'\n(\d+) ', r'\n', content)
# 生成新文件名
base, ext = os.path.splitext(input_file)
new_file = f"{base}(newformat){ext}"
# 将重新格式化的内容写入新文件
with open(new_file, 'w', encoding='utf-8') as file:
file.write(content)
print(f"转换完成,新文件保存为: {new_file}")
# 主程序
if __name__ == "__main__":
input_file = input("第一步:请输入要转换格式的文本文件路径: ")
transform_format(input_file)
效果
原txt文件截图
转换格式(保留了数字)的新txt文件截图