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

【无标题】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.xdnf.cn/news/16200.html

相关文章:

  • 字节 AI 编辑器 Trae 2.0 SOLO 出道! 国际版不充分指南及与国内版的对比
  • 腾讯云推出CodeBuddy:革新AI全栈开发体验
  • Xorg占用显卡内存问题和编译opencv GPU版本
  • docker安装minio及配置禁止列出目录文件
  • 时序数据库主流产品概览
  • 分布式电商系统:缓存策略、负载均衡与容灾方案
  • 一款基于 WPF 开源、功能全面的串口调试工具
  • YOLO12论文阅读:Attention-Centric Real-Time Object Detectors
  • Python关于pandas的基础知识
  • Springboot和postman的使用
  • torchvision.transforms 与 MONAI 数据增强的异同
  • 华为视觉算法面试30问全景精解
  • 网易视觉算法面试30问全景精解
  • C++ 模板库map数据结构的概念和使用案例
  • 板凳-------Mysql cookbook学习 (十二--------5)
  • 鸿蒙卡片开发保姆级教程
  • Java 线程池详解:从原理到实战,彻底掌握并发编程核心组件
  • Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现水下鱼类识别(C#代码,UI界面版)
  • 【机器学习深度学习】微调量化与模型导出量化:区分与应用
  • 数字护网:一次深刻的企业安全体系灵魂演练
  • JavaScript 03 严格检查模式Strict字符串类型详解
  • 论文笔记 | Beyond Pick-and-Place: Tackling Robotic Stacking of Diverse Shapes
  • Python机器学习:从零基础到项目实战
  • Netty中AbstractReferenceCountedByteBuf对AtomicIntegerFieldUpdater的使用
  • GRU模型
  • Linux操作系统之线程(六):线程互斥
  • SpringMVC快速入门之核心配置详解
  • 第十二章 用Java实现JVM之结束
  • 网络基础15-16:MSTP +VRRP综合实验
  • linux 环境服务发生文件句柄泄漏导致服务不可用