You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python动态替换DOC文件内的指定文本与元素

Python实现DOC文件自定义标记动态替换及加密货币行情插入方案

前置依赖安装

需要提前安装对应工具和Python库:

  • 文档处理:Windows环境用pywin32调用本地Word程序兼容旧版.doc格式读写,python-docx负责docx格式的内容编辑、图片插入
  • 网络请求:用requests拉取加密货币行情数据
  • 正则匹配:Python内置re模块,无需额外安装,负责提取所有符合规则的待替换标记

安装命令:

pip install python-docx pywin32 requests

非Windows环境处理旧版.doc文件需要额外安装格式转换工具:

  • macOS:执行brew install antiword
  • Debian/Ubuntu:执行sudo apt install antiword

完整实现流程

1. 读取DOC文件并提取所有待替换标记

首先统一将旧版.doc转为兼容的.docx格式,再通过正则匹配所有{cripto:币种代码}格式的自定义标记,提取需要查询的加密货币符号。

import re
import os
import requests
from docx import Document
from docx.shared import Inches
import win32com.client as win32

# 路径配置
INPUT_FILE = "./Example.doc"
OUTPUT_FILE = "./Example_filled.docx"
TEMP_DOCX = "./temp_convert.docx"
TEMP_CHART = "./temp_crypto_chart.png"

# doc转docx工具函数(Windows环境)
def convert_doc_to_docx(input_path, output_path):
    word_app = win32.gencache.EnsureDispatch('Word.Application')
    doc = word_app.Documents.Open(os.path.abspath(input_path))
    doc.SaveAs(os.path.abspath(output_path), FileFormat=16)
    doc.Close()
    word_app.Quit()

# 加载文档
if INPUT_FILE.endswith(".doc"):
    convert_doc_to_docx(INPUT_FILE, TEMP_DOCX)
    doc = Document(TEMP_DOCX)
else:
    doc = Document(INPUT_FILE)

# 正则提取所有加密货币标记
match_pattern = re.compile(r'\{cripto:([A-Za-z0-9]+)\}')
target_cryptos = []
for para in doc.paragraphs:
    found = match_pattern.findall(para.text)
    target_cryptos.extend(found)
# 去重避免重复查询
target_cryptos = list(set(target_cryptos))

2. 获取加密货币价格与行情截图

直接复用你已经调试完成的加密货币查询逻辑,传入币种符号获取最新价格、对应日期数据以及行情截图即可,示例代码框架如下:

def fetch_crypto_info(symbol):
    # 替换为你已有的行情查询逻辑
    # 1. 请求对应币种的最新价格、更新时间
    # 2. 获取/生成对应行情截图,保存到TEMP_CHART路径
    price = "1856.32"  # 示例值,替换为实际接口返回
    update_time = "2024-06-15 14:30 UTC"  # 示例值,替换为实际接口返回
    return f"{price} dolars(数据更新时间:{update_time})"

# 预生成所有标记对应的替换内容
replace_map = {}
for symbol in target_cryptos:
    replace_map[symbol] = fetch_crypto_info(symbol)

3. 替换标记并插入截图

遍历文档段落,将匹配到的标记替换为实际价格数据,同时在对应位置插入行情截图,最后保存为新文件:

# 遍历段落替换内容、插入图片
for para in doc.paragraphs:
    for symbol, replace_text in replace_map.items():
        mark = f"{{cripto:{symbol}}}"
        if mark in para.text:
            para.text = para.text.replace(mark, replace_text)
            # 插入行情截图,宽度设为4英寸,可按需调整
            img_run = para.add_run()
            img_run.add_picture(TEMP_CHART, width=Inches(4))

# 清理临时文件
if os.path.exists(TEMP_DOCX):
    os.remove(TEMP_DOCX)
# 保存最终文档
doc.save(OUTPUT_FILE)

其他标记格式适配

如果需要匹配括号、双引号包裹的待替换内容,只需要修改对应正则规则即可,后续替换逻辑无需调整:

  • 匹配英文括号包裹内容:r'\(([a-zA-Z0-9_]+)\)'
  • 匹配双引号包裹内容:r'"([a-zA-Z0-9_]+)"'
  • 其他自定义标记按照正则语法调整匹配规则即可。

常见问题处理

  • 若Word自动排版导致标记被拆分到不同文本块,正则直接匹配段落文本会失效,可以先将段落所有文本块的内容拼接为完整字符串,匹配到目标内容后清空原有文本块,重写替换后的内容即可
  • 非Windows环境可以用LibreOffice的命令行工具做doc到docx的转换,不需要依赖桌面Word程序
  • 图片尺寸可以通过修改Inches()的参数调整,避免图片过大破坏文档排版

内容的提问来源于stack exchange,提问作者Leonardo Araujo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 11:06:25