【技术类-02】python实现docx段落文字的“手动换行符(软回车)”变成“段落标记(硬回车)”

【技术类-02】python实现docx段落文字的“手动换行符(软回车)”变成“段落标记(硬回车)”技术类 02 python 实现 docx 段落文字的 手动换行符 软回车 变成 段落标记 硬回车 pythondocx 段落标记

大家好,欢迎来到IT知识分享网。

作品展示

【技术类-02】python实现docx段落文字的“手动换行符(软回车)”变成“段落标记(硬回车)”

背景需求:

制作周计划时,需要将周计划docx内所有的表格里的手动换行符(软回车)”变成“段落标记(硬回车)”,

【技术类-02】python实现docx段落文字的“手动换行符(软回车)”变成“段落标记(硬回车)”

【技术类-02】python实现docx段落文字的“手动换行符(软回车)”变成“段落标记(硬回车)”

【技术类-02】python实现docx段落文字的“手动换行符(软回车)”变成“段落标记(硬回车)”

【技术类-02】python实现docx段落文字的“手动换行符(软回车)”变成“段落标记(硬回车)”

全部改成段落标记(硬回车)

【技术类-02】python实现docx段落文字的“手动换行符(软回车)”变成“段落标记(硬回车)”

但是19份docx每份都要打开,把软回车变成硬回车,就需要Python

【技术类-02】python实现docx段落文字的“手动换行符(软回车)”变成“段落标记(硬回车)”

一开始,用替换“转义符”的思路,反复找了两天的代码,都没有成功。只能从头开始研究。

研究过程:

一、在Python里,手动换行符(^l)和段落标记(^p)是什么符号

【技术类-02】python实现docx段落文字的“手动换行符(软回车)”变成“段落标记(硬回车)”

【技术类-02】python实现docx段落文字的“手动换行符(软回车)”变成“段落标记(硬回车)”

如果某个符号等于3,等于2,说明它们就是手动换行符和段落标记的代码。

AI写了很多编码、16进制、转义符,最终推算获得正确代码,能够计算手动换行符和段落标记的出现的数量。

 ''' 了解在Python里,docx的手动换行符,段落标记用什么符号表示 作者:AI 对话大师、百度AI 时间:2024年3月15日 ''' from docx import Document # 读取Word文档 doc = Document(r'C:\Users\jg2yXRZ\OneDrive\桌面\测试word换行符\123.docx') # 初始化换行符计数器 newline_count = 0 # 遍历文档中的每个段落,统计换行符数量 for paragraph in doc.paragraphs: for run in paragraph.runs: # 统计每个文本运行中换行符的数量 newline_count += run.text.count("\n") # 只读取段落里面的软回车符号 # \u000D =0 # \u000A =3 # \n=3 # \r=0 # "^l" =0 # \u0085 =0 # "\u2029" =0 # \r\n =0 # "\x0a" print(f"Word 文档中共有 {newline_count} 个 '\ n' 手动换行符(软回车)。") from docx import Document # 打开 Word 文档 doc = Document(r'C:\Users\jg2yXRZ\OneDrive\桌面\测试word换行符\123.docx') # 初始化计数器 p_count = 0 # 遍历文档中的所有段落 for paragraph in doc.paragraphs: if paragraph._element is not None and paragraph._element.tag.endswith('p'): p_count += 1 print(f"Word 文档中共有 {p_count} 个 <w:p> 段落标记(硬回车)。") 

结论:正好3个软回车,2个硬回车

【技术类-02】python实现docx段落文字的“手动换行符(软回车)”变成“段落标记(硬回车)”

因此说明:

1、‘\n’代表docx里面的手动换行符(软回车)——转义符

【技术类-02】python实现docx段落文字的“手动换行符(软回车)”变成“段落标记(硬回车)”

2、‘段落元素’代表docx里面的段落标记(硬回车)——添加段落增加回车

【技术类-02】python实现docx段落文字的“手动换行符(软回车)”变成“段落标记(硬回车)”

在以上结论基础上,我用AI对话大师和百度AI生成并测试了无数次,终于将样板的四行段落文字(三行手动换行符+一行硬回车)替换成过了四行硬回车。

替换前

【技术类-02】python实现docx段落文字的“手动换行符(软回车)”变成“段落标记(硬回车)”

替换后:

【技术类-02】python实现docx段落文字的“手动换行符(软回车)”变成“段落标记(硬回车)”

代码展示:

''' word段落文字里的手动换行符变成段落标记 作者:AI对话大师、百度AI对话 时间:2024年3月15日 ''' from docx import Document from docx.shared import Pt # 打开 Word 文档 doc = Document(r'C:\Users\jg2yXRZ\OneDrive\桌面\测试word换行符\123.docx') # 用于保存要删除的段落 paragraphs_to_delete = [] # 遍历文档中的所有段落 for paragraph in list(doc.paragraphs): # 查找段落中的软回车(\n) if '\n' in paragraph.text: # 分割段落文本,找到软回车的位置 texts = paragraph.text.split('\n') # 首先处理第一个文本块 paragraph.text = texts[0] # 在软回车的位置插入新的段落 for text in texts[0:]: new_paragraph = paragraph.insert_paragraph_before(text) new_paragraph.style = paragraph.style # 保留原始样式 # 将原始段落添加到待删除列表中 paragraphs_to_delete.append(paragraph) # 删除原来的段落 for paragraph in paragraphs_to_delete: paragraph._element.getparent().remove(paragraph._element) doc.save(r'C:\Users\jg2yXRZ\OneDrive\桌面\测试word换行符\234.docx')

通过代码观察:

Python对docx段落文字的替换的原理

1、将手动换行符左侧的内容复制到新列表,然后在原有位置重新段落写入,就会有硬回车
2、将包含手动换行符的原始段落进行删除。【技术类-02】python实现docx段落文字的“手动换行符(软回车)”变成“段落标记(硬回车)”

思考:

Python的替换与word直接批量查找替换不同,

1、word可以对全文中段落和表格中的手动换行符全部替换

2、以上Python代码(只涉及paragraphs)只能对word段落文字中的手动换行符进行删除和重新写入段落,从而获得段落标记回车符。

其他测试

把手动换行符与段落标记的位置换一下,看看结果是否有误差。

测试1:

【技术类-02】python实现docx段落文字的“手动换行符(软回车)”变成“段落标记(硬回车)”

【技术类-02】python实现docx段落文字的“手动换行符(软回车)”变成“段落标记(硬回车)”

【技术类-02】python实现docx段落文字的“手动换行符(软回车)”变成“段落标记(硬回车)”

测试2

【技术类-02】python实现docx段落文字的“手动换行符(软回车)”变成“段落标记(硬回车)”

【技术类-02】python实现docx段落文字的“手动换行符(软回车)”变成“段落标记(硬回车)”

【技术类-02】python实现docx段落文字的“手动换行符(软回车)”变成“段落标记(硬回车)”

全部代码(计算回车数量+批量删添段落实现回车符)

 ''' 了解在Python里,docx的手动换行符,段落标记用什么符号表示 作者:AI 对话大师、百度AI对话 时间:2024年3月15日 ''' from docx import Document # 读取Word文档 doc = Document(r'C:\Users\jg2yXRZ\OneDrive\桌面\测试word换行符\123.docx') # 初始化换行符计数器 newline_count = 0 # 遍历文档中的每个段落,统计换行符数量 for paragraph in doc.paragraphs: for run in paragraph.runs: # 统计每个文本运行中换行符的数量 newline_count += run.text.count("\n") # 只读取段落里面的软回车符号 # \u000D =0 # \u000A =3 # \n=3 # \r=0 # "^l" =0 # \u0085 =0 # "\u2029" =0 # \r\n =0 # "\x0a" print(f"Word 文档中共有 {newline_count} 个 '\ n' 手动换行符(软回车)。") from docx import Document # 打开 Word 文档 doc = Document(r'C:\Users\jg2yXRZ\OneDrive\桌面\测试word换行符\123.docx') # 初始化计数器 p_count = 0 # 遍历文档中的所有段落 for paragraph in doc.paragraphs: if paragraph._element is not None and paragraph._element.tag.endswith('p'): p_count += 1 print(f"Word 文档中共有 {p_count} 个 <w:p> 段落标记(硬回车)。") ''' word段落文字里的手动换行符变成段落标记 作者:AI对话大师、百度AI对话 时间:2024年3月15日 ''' from docx import Document from docx.shared import Pt # 打开 Word 文档 doc = Document(r'C:\Users\jg2yXRZ\OneDrive\桌面\测试word换行符\123.docx') # 用于保存要删除的段落 paragraphs_to_delete = [] # 遍历文档中的所有段落 for paragraph in list(doc.paragraphs): # 查找段落中的软回车(\n) if '\n' in paragraph.text: # 分割段落文本,找到软回车的位置 texts = paragraph.text.split('\n') # 首先处理第一个文本块 paragraph.text = texts[0] # 在软回车的位置插入新的段落 for text in texts[0:]: new_paragraph = paragraph.insert_paragraph_before(text) new_paragraph.style = paragraph.style # 保留原始样式 # 将原始段落添加到待删除列表中 paragraphs_to_delete.append(paragraph) # 删除原来的段落 for paragraph in paragraphs_to_delete: paragraph._element.getparent().remove(paragraph._element) doc.save(r'C:\Users\jg2yXRZ\OneDrive\桌面\测试word换行符\234.docx') 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/134044.html

(0)
上一篇 2025-07-15 17:33
下一篇 2025-07-15 17:45

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信