招生门户网站建设方案,wordpress删除rss,手机网站建设制作教程视频,wordpress博客主题模板免费通义千问等大模型生成的回答多数是markdown类型的#xff0c;需要将他们转为Word文件
一 pypandoc 介绍
1. 项目介绍 pypandoc 是一个用于 pandoc 的轻量级 Python 包装器。pandoc 是一个通用的文档转换工具#xff0c;支持多种格式的文档转换#xff0c;如 Markdown、HTM…通义千问等大模型生成的回答多数是markdown类型的需要将他们转为Word文件
一 pypandoc 介绍
1. 项目介绍 pypandoc 是一个用于 pandoc 的轻量级 Python 包装器。pandoc 是一个通用的文档转换工具支持多种格式的文档转换如 Markdown、HTML、LaTeX、DocBook 等。pypandoc 通过提供一个简单的 Python 接口使得在 Python 脚本中调用 pandoc 变得更加方便。
2. 安装
使用pip安装 pip install pypandoc_binary 自动下载 Pandoc并安装 注意pypandoc 提供了两个包 pypandoc需要用户自行安装 pandoc软件才能使用。 pypandoc_binary包含了预编译的 pandoc 二进制文件方便用户快速上手。
手动安装 可以手动安装pandoc再安装pypandoc库 pip install pypandoc 也可以先安装pypandoc然后再在pyhon中运行 pypandoc.download_pandoc()函数自动下载并安装 Pandoc将其存放在 pypandoc 可以访问的目录中。
二、使用Python 将markdown转Word 本脚本实现了三类功能 1、将markdown文件转为word文件 2、将 markdown中段落开头的“-“转为回车避免渲染成黑点或者空心圆等Word中不常见的符号 3、自定义了模板格式化输出。
import pypandoc
import time
import re# 定义路径
path1 rmd.md
path2 r.docx
template_path rD:\aTools\ytemplates\templates_s.docx# 读取原始Markdown文件内容
with open(path1, r, encodingutf-8) as file:content file.read()# 使用正则表达式将以- 开头的部分替换为换行符
processed_content re.sub(r- , \n, content)# 记录开始时间
t1 time.time()# 将处理后的内容转换为Word文档
pypandoc.convert_text(processed_content,docx,formatmd,outputfilepath2,extra_args[--reference-doc, template_path]
)# 打印耗时
print(time.time() - t1)
print(转换完成)
三、直接指定Word格式
直接读取文件可以为txt或者md)转为指定格式的word。 这里格式是 1、将 markdown中段落开头的“-“转为回车避免渲染成黑点或者空心圆等Word中不常见的符号 2、将原来加粗部分继续加粗和左对齐 3、字体为黑色GB2312
注意代码用正则替换####这些时需要先从4级标题开始替换否则会有逻辑错误导致奇数个#无法替换。
设置中文字体不能用run.font.name 仿宋_GB2312’而是用style._element.rPr.rFonts.set(qn(‘w:eastAsia’), ‘仿宋_GB2312’) 设置中文字体。
import re
from docx import Document
from docx.shared import Pt, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.oxml.ns import qn# 定义设置字体和颜色的函数
def set_font_color(run):run.font.name Times New Roman # 设置西文字体run._element.rPr.rFonts.set(qn(w:eastAsia), 仿宋_GB2312) # 设置中文字体run.font.size Pt(12)run.font.color.rgb RGBColor(0, 0, 0)run.italic False # 去除斜体# 定义路径
path1 rC:\Users\xueshifeng\Desktop\数据分割.txt
path2 rC:\Users\xueshifeng\Desktop\数据分割.docx# 读取原始txt文件内容
with open(path1, r, encodingutf-8) as file:content file.read()# 处理以- 开头的项目符号
processed_content re.sub(r- , \n, content)# 创建一个新的Word文档
doc Document()# 设置默认字体为仿宋_GB2312
style doc.styles[Normal]
style.font.name Times New Roman # 设置西文字体
style._element.rPr.rFonts.set(qn(w:eastAsia), 仿宋_GB2312) # 设置中文字体
style.font.size Pt(12)
style.font.color.rgb RGBColor(0, 0, 0)# 正则表达式模式
bold_pattern re.compile(r\*\*(.*?)\*\*)
heading4_pattern re.compile(r^\s*####\s*(.*)) # 四级标题
heading3_pattern re.compile(r^\s*###\s*(.*)) # 三级标题
heading2_pattern re.compile(r^\s*##\s*(.*)) # 二级标题
heading1_pattern re.compile(r^\s*#\s*(.*)) # 一级标题# 处理每一行内容
for line in processed_content.split(\n):# 检查四级标题heading_match heading4_pattern.match(line)if heading_match:title_text heading_match.group(1).strip()if title_text:heading doc.add_heading(title_text, level4)heading.alignment WD_ALIGN_PARAGRAPH.LEFTfor run in heading.runs:set_font_color(run)run.bold Truecontinue # 跳过后续处理# 检查三级标题heading_match heading3_pattern.match(line)if heading_match:title_text heading_match.group(1).strip()if title_text:heading doc.add_heading(title_text, level3)heading.alignment WD_ALIGN_PARAGRAPH.LEFTfor run in heading.runs:set_font_color(run)run.bold Truecontinue # 跳过后续处理# 检查二级标题heading_match heading2_pattern.match(line)if heading_match:title_text heading_match.group(1).strip()if title_text:heading doc.add_heading(title_text, level2)heading.alignment WD_ALIGN_PARAGRAPH.LEFTfor run in heading.runs:set_font_color(run)run.bold Truecontinue # 跳过后续处理# 检查一级标题heading_match heading1_pattern.match(line)if heading_match:title_text heading_match.group(1).strip()if title_text:heading doc.add_heading(title_text, level1)heading.alignment WD_ALIGN_PARAGRAPH.LEFTfor run in heading.runs:set_font_color(run)run.bold Truecontinue # 跳过后续处理# 处理普通段落和加粗文本matches list(bold_pattern.finditer(line))if not matches:paragraph doc.add_paragraph(line)paragraph.alignment WD_ALIGN_PARAGRAPH.LEFTfor run in paragraph.runs:set_font_color(run)else:paragraph doc.add_paragraph()start 0for match in matches:if match.start() start:run paragraph.add_run(line[start:match.start()])set_font_color(run)run paragraph.add_run(match.group(1))run.bold Trueset_font_color(run)start match.end()if start len(line):run paragraph.add_run(line[start:])set_font_color(run)paragraph.alignment WD_ALIGN_PARAGRAPH.LEFT# 保存文档
doc.save(path2)print(转换完成)
四、将LaTex公式转为Word
将 latex_content字符串$ $ 中间的位置替换为公式或者直接复制代码到GPT让GPT修改代码
import pypandoc# 定义包含特定公式的LaTeX字符串
#$ $ 中间的位置替换为公式或者直接复制代码到GPT让GPT生成最终代码
latex_content r
\documentclass{article}
\usepackage{amsmath} % 确保包含用于数学排版的包
\begin{document}$ L(y_i, f(x_i)) \max(0, 1 - y_if(x_i)) $\end{document}
# 将LaTeX内容转换为Word文档
output_file rxx14.docxoutput pypandoc.convert_text(latex_content, # 输入的字符串docx, # 输出格式formatlatex, # 输入格式LaTeXoutputfileoutput_file, # 输出文件路径extra_args[--mathml] # 额外参数确保公式渲染为MathML格式
)# 检查转换是否成功
if output ! :print(f转换过程中出现错误: {output})
else:print(fWord 文档已生成: {output_file})