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

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

    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的解析

你可能感兴趣的:(python,python,docx,空行)