python实现批量word关键字标注

本文介绍如何使用Python编程语言高效地实现批量处理Word文档,并进行关键词标注。通过示例代码,展示如何读取Word文件,搜索特定关键词并进行高亮标注,提升文档处理的自动化水平。
import docx
import os
from docx.opc import exceptions
from docx import shared

def replace_docx_format(path, dicts, formats=None, output=None):
    """
    Args:
        :param path: 文件路径,不可为空。
        :param dicts: 用于查找的字典,不可为空。
        :param formats: 具体目标格式。(默认为只加下划线)
        :param output: 格式化之后的保存到新文件的路径。(默认为原路径)

    Returns:
        输出查找的结果,如果为True则表示找到并替换成功,
        如果为False则表示未找到指定内容。

    Raises:
        ImportError: 缺少必要的库。
        PackageNotFoundError: 输入的文件路径有错,没有找到指定文件。
        TypeError: 缺少必要的参数或其他错误。
    """
    if not output:
        print('[提示] 已启用默认输出:新文件将会尝试覆盖源文件。')
        output = path
    if '.docx' not in path or '.docx' not in output:
        print('[错误] 请使用docx文件。')
        return False
    if not formats:
        print('[提示] 已启用默认格式:为找到的文字变红加粗。')
        formats = ['bold', 'red']

    count = 0
    try:
        file = docx.Document(path)
    except exceptions.PackageNotFoundError:
        print('[错误] 在路径 ', path, ' 下未找到指定文件!')
        return False
    for paragraph in file.paragraphs:
        for run in paragraph.runs:
            for key in dicts:
                if key in run.text:
                    rest = run.text.split(key)
                    count += 1
                    if key == run.text:
                        run = format_docx_runs(run, formats)
                    else:
                        rest = run.text.split(key)
                        run.text = ''
                        for text in rest[:-1]:
                            r = paragraph.add_run(text=text)
                            r = format_docx_runs(r, format1)
                            r = paragraph.add_run(text=key)
                            r = format_docx_runs(r, formats)
                            r = paragraph.add_run(rest[-1])
                            r = format_docx_runs(r, format1)

    if count == 0:
        print('[警告] 在文档 ', path, ' 中未找到指定内容!未进行保存。')
        return False
    try:
        file.save(output)
    except IOError:
        print('[错误] 请先关闭output的目标文件。')
    print('[提示] 已找到 ', count, ' 处需要替换的内容,并保存至 ', output)


def format_docx_runs(runs, formats):
    if 'underline' in formats:
        runs.underline = True
    if 'bold' in formats:
        runs.bold = True
    if 'red' in formats:
        runs.font.color.rgb = docx.shared.RGBColor(250, 0, 0)
    return runs

def list_folders_files(path):
    """
    返回 "文件夹" 和 "文件" 名字
    :param path: "文件夹"和"文件"所在的路径
    :return:  (list_folders, list_files)
            :list_folders: 文件夹
            :list_files: 文件
    """
    list_folders = []
    list_files = []
    for file in os.listdir(path):
        file_path = os.path.join(path, file)
        if os.path.isdir(file_path):
            list_folders.append(file)
        else:
            list_files.append(file)
    return (list_folders, list_files)


if __name__ == '__main__':  # 主函数(测试用)
    #   Example:
    #   检查与本文件同目录下的document.docx文件中的Hello和World单词,如果存在,则替换为默认标注格式,并输出到源文件
    path = "C:\\Users\\LENOVO\\Desktop\\文献\\汇总-各家条文\\word汇总\\汇总-各家条文-形\\38-背"
    (list_folders, list_files) = list_folders_files(path)
    format1=['black']
    print("Path: " + path)
    for fileName in list_files:
        filePath = path + '\\' + fileName
        replace_docx_format(filePath, ['背'])

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值