当前位置: 首页 > 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.lryc.cn/news/597403.html

相关文章:

  • Docker详解及实战
  • Oracle物化视图详解
  • RPA认证考试全攻略:如何高效通过uipath、实在智能等厂商考试
  • InfluxDB HTTP API 接口调用详解(一)
  • 【DataWhale】快乐学习大模型 | 202507,Task06笔记
  • Hexo - 免费搭建个人博客03 - 将个人博客托管到github,个人博客公开给大家访问
  • 深度相机---像素转物理尺寸
  • Paimon的部分更新以及DeleteVector实现
  • 篇四 tcp,udp客户端服务器编程模型
  • MYSQL 笔记3
  • 实验室信息管理系统的设计与实现/实验室管理系统
  • lwIP学习记录5——裸机lwIP工程学习后的总结
  • 【bug】websocket协议不兼容导致的一个奇怪问题
  • Linux 723 磁盘配额 限制用户写入 quota;snap快照原理
  • Linux 环境下安装 MySQL 8.0.34 二进制 详细教程 附docker+k8s启动
  • VU2 学习笔记4 计算属性、监视属性
  • 北京互联网公司面试题精华解析
  • 计算机网络学习----Https协议
  • 直接偏好优化(DPO):原理、演进与大模型对齐新范式
  • python-82-基于ORM操作数据库(一)简单模型CRUD
  • UniappDay01
  • JavaWeb笔记12
  • MySQL深度理解-深入理解MySQL索引底层数据结构与算法
  • 容联云携手信通院,启动“智能体服务生态共创计划”
  • 华为云ELB(弹性负载均衡)持续报异常
  • 2025年Zigbee技术白皮书:全球物联网无线通信的关键创新
  • HF86611_VC1/HF86611Q_VC1:多通道USB HiFi音频解码器固件技术解析
  • 【自动化运维神器Ansible】深入解析Ansible Host-Pattern:精准控制目标主机的艺术
  • .Net core 部署到IIS出现500.19Internal Server Error 解决方法
  • Ubuntu系统下FFmpeg源码编译安装