
前言我打碎了夕阳,耀眼的光芒照在我的脸上,里面是少年的青春与猖狂,我拾起一块碎片,里面有着你的模样
---长安
公司给小姐姐发了一份包含答案和题干的选择题以及判断题;需要小姐姐自己把答案填上题干,以及记忆,来备考,于是有了下面的对话
小姐姐:哎呀,发的文档答案和题干是分离的,这上千道题一个个找答案好麻烦啊;而且还容易把答案填混。
小屌丝:给我点一杯奶茶,我一会儿给你解决
小姐姐:真的吗?那我马上给你点,哈哈哈
小屌丝于是开始了以下征程
使用python完成word文档内容的修改和替换--快速将答案填写到题干中;先来看下需求【密密麻麻的题干和答案】
安装第三方可以读写docx的库
命令:pip install python-docx
废话不多说,直接上代码
import os
import re
from docx import Document
path = r'E:\XXXX\raw.docx' # 原生文件
document = Document(path)
# 获取原始文件中的答案,根据答案规律进行过滤
def get_answer():
ans = ''
answers = []
for paragraph in document.paragraphs:
req = paragraph.text
if '. ' in req:
answers.append(req)
for an in answers:
ans = ans + an
answer_list = re.findall(r'[A-Z]', ans)
return answer_list
# 将答案添加到题干中
def replace_answer():
# 清空并生成存放目标路径
has_answer_file = './target.docx'
if os.path.exists(has_answer_file):
os.remove(has_answer_file)
# 获取答案并存放在answers列表中
answers = get_answer()
num = 0
try:
# 获取原始文件对象,并对其进行答案替换,并重新写入目标文件中
for paragraph in document.paragraphs:
req = paragraph.text
if ' )' in req:
req = req.replace(' )', '%s )\n' % answers[num])
num += 1
with open(has_answer_file, 'a+', encoding='utf8') as f:
f.write(req)
elif '答案' in req:
break
else:
with open(has_answer_file, 'a+', encoding='utf8') as f:
f.write(req)
except:
pass
if __name__ == '__main__':
replace_answer()
呈现效果
格式比较丑,需要做格式优化
格式优化代码# 对已经成功替换好了的文件进行格式优化
def main():
max = len(get_answer())
all_text = ''
for paragraph in document.paragraphs:
req = paragraph.text
all_text = all_text + req
# 增加换行
all_text = all_text.replace('。', '。\n')
for i in range(1, max):
all_text = all_text.replace('%d.' % i, '\n%d.' % i)
with open('yourfilename.docx', 'a+', encoding='utf8') as f:
f.write(all_text)
最终优化后的效果
总结
小结一:通过with open 写入到docx文件中,无法使用docx第三方库读取,是因为写的时候是以字符串方式写入到docx文件中的,而不是docx格式【包含段落、标题等】;所以需要手动将写入的docx文件使用Word打开并另存为一份docx文件;后面美化格式需要对其进行进一步 *** 作
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)