【问题标题】:reading docx with python2.7用python2.7阅读docx
【发布时间】:2014-07-23 03:26:55
【问题描述】:

我正在尝试使用以下代码读取 docx 文件:

from docx import Document
doc = Document('test.docx')

但是当我尝试打印它时,我得到了这个:

<docx.api.Document object at 0x02952C70>

如何读取文件内的内容?

我读到 docx 最近发生了变化,所以旧的问题/答案不再适用。

【问题讨论】:

  • 您是否尝试访问这些段落?
  • 不,我该怎么做@IgnacioVazquez-Abrams?
  • 您是否尝试按照文档中的说明进行操作?
  • 是的,我已经检查了文档,但我没有看到关于段落的功能。我刚刚看到section函数whci也返回一个类似的十六进制代码。

标签: python


【解决方案1】:

在此处查看 Document 对象的结构:

Source code for docx.api

例如,如果要获取属性“paragraphs”:

doc = Document('test.docx')
paragraphs = doc.paragraphs()

我希望这会有所帮助。

编辑:我在python-docx's gitHub repository 中找到了这个 sn-p,并在此处进行了一些编辑:

document = docx.Document(filename)
docText = '\n\n'.join([
    paragraph.text.encode('utf-8') for paragraph in document.paragraphs
])
print docText

join() 函数从段落属性返回的数组中的段落中接收以 UTF-8 编码的字符串列表。所以结果看起来像:

paragraph 1

paragraph 2

paragraph 3

看起来这样可以,但它不打印表格、页眉或页脚。

编辑:此链接是有关 python-docx 的所有文档的主要索引:

python-docx 0.7.4 documentation

【讨论】:

  • 好的,但我仍然得到十六进制代码,而不是纯文本
  • 我已经编辑了分配新信息的答案和代码 sn-p。看看吧。
  • 谢谢,但我遇到了特殊字符的问题(例如,我没有得到 são,而是得到 s├úo)。
  • 也许,在你的情况下,你不需要编码 - 所以它只是没有 encode() 方法的paragraph.text,或者你需要使用你的软件使用的编码对其进行编码- 请原谅重复。
【解决方案2】:

可以不使用docx 模块通过Python 从Word 文件中提取信息。 One solution, (there are many), from etiennedocx 的一个非常基本的版本,它可能会删除您获得的十六进制数字。但是,就像 SebasSBM 的回答一样,它不适用于其他功能,例如表格等。

如果还是不行,我建议看看these answers;也许其中之一仍然与您的新 docx 格式相关。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-02
    • 2015-08-10
    • 1970-01-01
    • 2017-03-23
    • 2017-09-06
    • 1970-01-01
    相关资源
    最近更新 更多