Python docx 清除空行(保留图片)

本文介绍了如何使用Python的docx库精确删除Word文档中的空行,避免误删图片行。作者分享了两种方法,一是基于文本长度和运行数判断,二是针对特殊字符和图片特征的深入分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

网上清除空行的资料居然不多,出乎意料。不过好在找到一个答案

    def _delBlankLine( file):
        '''
        清除word文档的空行
        :param file: 文档
        '''
        doc = Document(file)
        for paragraph in doc.paragraphs:  # 读取文档段落
            if len(paragraph.text) == 0:
                p = paragraph._element
                p.getparent().remove(p)
                p._p = p._element = None
        doc.save(file)

但是上面代码有问题,就是仅有图片的行也会被清除,因为图片也没有文字。
我很意外的是Python这么强大的工具居然没有判断图片的能力。。

所以我只能自己研究:
我发现,如果真的是普通的空行,他的len(paragraph.runs)==0。而有图片的行len(paragraph.runs)>=1。

然而实际情况比这更复杂:
有些肉眼看上去是空行的,他text可能是‘\n’
也有的text为空,但是paragraph.runs不为空。但是len(paragraph.runs)也会有限,目前只发现==1的情况,还没有发现==2的。
所以,这里提供一种思路,但不完全适用所有的场景。可以自己去debug比较,到底有哪些变量可以作为判断的依据:

    def _delBlankLine( file):
        '''
        清除word文档的空行
        :param file: 文档
        '''
        doc = Document(file)
        for paragraph in doc.paragraphs:  # 读取文档段落
            if len(paragraph.text) == 0 and len(paragraph.runs) <= 1:
                p = paragraph._element
                p.getparent().remove(p)
                p._p = p._element = None
        doc.save(file)

我这个就根据特点,有图片的行至少有两张图片一起。所以我的len(paragraph.runs) >= 2。所以以上就可以解决我的问题。

还可以看看这篇文章对docx的解析:docx的解析

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lsjweiyi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值