当前位置: 首页 > news >正文

【无标题】word 中的中文排序

import docx
from docx import Document
from docx.shared import Pt
from pypinyin import pinyin, Style, lazy_pinyin
import redef get_first_char_pinyin(text):"""获取中文段落开头汉字的拼音(首字母大写)"""if re.match(r'[\u4e00-\u9fff]', text):return lazy_pinyin(text[0], style=Style.FIRST_LETTER)[0].upper()return ''def is_chinese_paragraph(paragraph):"""判断段落是否为中文段落"""return bool(re.match(r'[\u4e00-\u9fff]', paragraph.text.strip()))def apply_font_to_paragraph(paragraph, font_name='宋体'):"""为段落应用指定的字体"""for run in paragraph.runs:try:run.font.name = font_nameexcept ValueError:# 如果字体名称无效或不受支持,可能会引发ValueError# 这里可以捕获异常并做适当处理,比如记录日志或回退到默认字体passdef sort_paragraphs(paragraphs):"""根据要求排序段落,处理空文本段落"""chinese_paragraphs = []english_paragraphs = []for p in paragraphs:stripped_text = p.text.strip()if stripped_text:  # 只处理非空文本段落if is_chinese_paragraph(p):# 对中文段落,使用拼音首字母作为排序键(如果文本非空)# 注意:这里假设 get_first_char_pinyin 能处理单字符输入chinese_paragraphs.append((p, get_first_char_pinyin(stripped_text[0]) if len(stripped_text) > 0 else ''))else:# 对英文段落,使用文本首字母小写作为排序键(如果文本非空)english_paragraphs.append((p, stripped_text[0].lower() if len(stripped_text) > 0 else ''))# 对中英文段落分别按排序键排序(注意这里我们存储了段落和排序键的元组)chinese_paragraphs.sort(key=lambda x: x[1])english_paragraphs.sort(key=lambda x: x[1])# 提取排序后的段落对象列表sorted_chinese = [p for p, _ in chinese_paragraphs]sorted_english = [p for p, _ in english_paragraphs]# 合并排序后的中英文段落列表return sorted_chinese + sorted_englishdef main(input_path, output_path):# 读取Word文档doc = Document(input_path)paragraphs = doc.paragraphs# 排序段落sorted_paragraphs = sort_paragraphs(paragraphs)# 创建新的Word文档并添加排序后的段落new_doc = Document()for para in sorted_paragraphs:new_para = new_doc.add_paragraph()# 复制段落内容new_para.add_run(para.text)# 为中文段落应用宋体字体(如果可用)if is_chinese_paragraph(para):apply_font_to_paragraph(new_para, '宋体')# 保存新的Word文档new_doc.save(output_path)if __name__ == "__main__":input_path = 'input.docx'  # 输入的Word文件路径output_path = 'sorted_output.docx'  # 输出的Word文件路径main(input_path, output_path)
http://www.dtcms.com/a/294106.html

相关文章:

  • Pycharm2025 安装教程 免费分享 没任何套路
  • PDF转Word的简单方法
  • CSP-J 2021 入门级 第一轮(初赛) 阅读程序(3)
  • Android组件化实现方案深度分析
  • Day 8-zhou R包批量安装小补充!!!
  • java设计模式 -【策略模式】
  • AJAX案例合集
  • flutter使用CupertinoPicker绘制一个传入数据源的省市区选择器
  • 二级建造师学习笔记-2025
  • 【Linux-云原生-笔记】keepalived相关
  • DenseNet详解,附模型代码(pytorch)
  • Python设计模式 - 桥接模式
  • vite搭建react-ts项目,@别名配置
  • Python-Pytorch编码习惯
  • Windows 编程辅助技能:速览定义
  • 生成式人工智能展望报告-欧盟-02-技术方面
  • 以 “有机” 重构增长:云集从电商平台到健康生活社区的跃迁
  • 突发限制下的破局之路:国产之光 Lynx 重构 AI 开发安全壁垒
  • Petalinux的常用指令
  • Hexo - 免费搭建个人博客04 - 创建另一个私人仓库,对Hexo项目进行版本管理
  • RabbitMQ--消费端单线程与多线程
  • 电子电气架构 --- 汽车软件全生命周期
  • 小架构step系列23:加载自定义配置
  • Vue 浏览器本地存储
  • 05-ES6
  • Linux修炼:进程概念(上)
  • apache-doris安装兼datax-web配置
  • 【2025】使用vue构建一个漂亮的天气卡片
  • 加载用户设置时遇到错误找到一个带有无效“icon“的配置文件。将该配置文件默认为无图标。确保设置“icon“时,该值是图像的有效文件路径“
  • 基于php的校园招聘平台