阅读Python中的.docx文件以查找删除线、项目符号和其他格式

阅读Python中的.docx文件以查找删除线、项目符号和其他格式,python,pandoc,python-docx,Python,Pandoc,Python Docx,在使用Python docx的Python中,有谁能帮助我识别.docx文件中的段落是否包含使用删除线格式的文本(即,它看起来是,但被划掉了),或者在开头有一个项目符号?我试图编写一个脚本来识别文档中的结构并解析内容 到目前为止,我能够阅读一个.docx文件并遍历段落,识别粗体的段落 from docx import Document document = Document(r'C:\stuff\Document.docx') for p in document.paragraphs:

在使用Python docx的Python中,有谁能帮助我识别.docx文件中的段落是否包含使用删除线格式的文本(即,它看起来是,但被划掉了),或者在开头有一个项目符号?我试图编写一个脚本来识别文档中的结构并解析内容

到目前为止,我能够阅读一个.docx文件并遍历段落,识别粗体的段落

from docx import Document
document = Document(r'C:\stuff\Document.docx')
for p in document.paragraphs:
    print p.text
    for run in p.runs:
        if run.bold:
            print 'BOLD ' + run.text

其余的我暂时想不起来了。

遵循mkrieger1的建议-我建议使用Pandoc将.docx转换为.html并从那里解析文档


安装Pandoc与安装python docx是一样的,从.docx到.html的转换在使用Pandoc时非常有效。在.html中,我正在解析的文档结构和所有格式元素都非常清晰,因此易于使用。

使用本机Word DocX解析器,而不是将其转换为html并使用html解析器,根据:


对于删除线,您可以这样修改示例:

from docx import Document
document = Document(r'C:\stuff\Document.docx')
for p in document.paragraphs:
    for run in p.runs:
        if run.font.strike:
            print "STRIKE: " + run.text

查看该对象的API文档,了解更多有趣的内容。

您应该使用类似的内容。您对发布的代码有什么具体问题吗?我不清楚这是否符合您的要求。具体问题是——如何找到格式为删除线或要点的段落。其他格式也很有用,但这两种格式是最重要的,显然你可以找到粗体的段落。你不能用同样的方法来找到其他类型的格式吗?如果没有,请解释您尝试了什么以及为什么它不起作用。您是否阅读过:
列表项目符号
样式?您希望使用
docx
执行一项相当简单的任务,而docx又是基于
lxml
——使用不同的XML格式(如HTML)不会使任务更简单,但会使任务更间接。您是否已签出
docx
源代码?如果您在过去做过任何XML处理,那么使用它是非常容易的。在上面的Python代码中设置一个断点并查看段落对象结构,我看不出任何明显的方法来确定段落的格式是删除线还是项目符号。一些网站提到.docx格式的复杂性(显然与文件格式中的向后兼容性要求有关),使某些段落格式变得模糊。使用Pandoc可以让我的HTML像白天一样清晰-删除线和项目符号列表都是
  • 。也许不单纯优雅,但很务实。我对这个问题投了赞成票,我只是认为这是一个糟糕的答案。您已经为它添加了标签
    python-docx
    ,并给出了一个对使用python-docx的人毫无帮助的答案。公平地说,我将更正这些标签。到目前为止,唯一帮助我远离python docx的答案。我不介意问题是如何解决的,只要解决方案有效。在pandoc中,你也可以编写一个pandoc过滤器来修改那里的ast。。。(而不是修改html)。虽然PythonDocx在这种特定情况下也可以工作……感谢您链接有关字体的文档,这有助于查找PythonDocx中使用的长度子类
    from docx import Document
    document = Document(r'C:\stuff\Document.docx')
    for p in document.paragraphs:
        for run in p.runs:
            if run.font.strike:
                print "STRIKE: " + run.text