使用python完成word文档内容的修改和替换--快速将答案填写到题干中

使用python完成word文档内容的修改和替换--快速将答案填写到题干中,第1张

 我打碎了夕阳,耀眼的光芒照在我的脸上,里面是少年的青春与猖狂,我拾起一块碎片,里面有着你的模样

---长安

前言

公司给小姐姐发了一份包含答案和题干的选择题以及判断题;需要小姐姐自己把答案填上题干,以及记忆,来备考,于是有了下面的对话 

小姐姐:哎呀,发的文档答案和题干是分离的,这上千道题一个个找答案好麻烦啊;而且还容易把答案填混。

小屌丝:给我点一杯奶茶,我一会儿给你解决

小姐姐:真的吗?那我马上给你点,哈哈哈

小屌丝于是开始了以下征程

使用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文件;后面美化格式需要对其进行进一步 *** 作

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/905055.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-15
下一篇2022-05-15

发表评论

登录后才能评论

评论列表(0条)

    保存