吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1353|回复: 8
收起左侧

[求助] python读取word的标题编号

[复制链接]
SFTiger2022 发表于 2023-6-19 00:31
使用Python的`python-docx`库来读取WORD文档中的各级标题,以及编号信息时,不管使用paragraph._element.xpath('./w:pPr/w:numPr', namespaces=para._element.nsmap)还是paragraph._element.xpath('./w:pPr/w:numPr', namespaces=nsmap)都会报错,如:TypeError: _OxmlElementBase.xpath() got an unexpected keyword argument 'namespaces',网上说就是python-docx版本的问题,但重新安装几次都不行,不带后面的参数就获取不到实际情况,请问如何顺利获取WORD文档中的各级标题的编号信息?

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

dfxc10 发表于 2023-6-19 08:15
paragraph._element.xpath('.//w:numPr')来获取段落中的编号信息,而不需要使用namespaces参数。例如:
from docx import Document

doc = Document('your_document.docx')
for paragraph in doc.paragraphs:
    num_prop = paragraph._element.xpath('.//w:numPr')
    if len(num_prop) > 0:
        # 处理编号信息
        pass
头像被屏蔽
saszznz 发表于 2023-6-19 10:34
OmJJWang 发表于 2023-6-19 12:58
这个是AI的回答,我觉得能够解答你的疑问。

报错的原因是`python-docx`库的版本问题导致的。在较早的版本中,确实没有提供`namespaces`参数来进行命名空间的映射。

要解决这个问题,你可以尝试更新`python-docx`库到最新版本。可以通过运行以下命令来安装最新版本的`python-docx`:

```plaintext
pip install python-docx --upgrade
```

升级后,你就可以使用`namespaces`参数来获取 WORD 文档中各级标题的编号信息了。以下是一个示例代码:

```python
from docx import Document

# 打开文档
doc = Document('your_document.docx')

# 遍历文档中每个段落
for paragraph in doc.paragraphs:
    # 获取段落中的文本
    text = paragraph.text
   
    # 获取段落中的编号信息
    numbering = paragraph._element.xpath('.//w:numPr', namespaces=paragraph._element.nsmap)
   
    # 判断段落是否为标题(拥有编号信息)
    if numbering:
        # 输出标题级别和编号信息
        level = len(paragraph.style.name.split())
        print(f'标题级别:{level},编号信息:{numbering}')
```

请注意,`_element.xpath()` 方法属于内部方法,使用时需要小心,因为它可能会受到库版本变化的影响。

另外,为了避免使用内部方法,你还可以考虑使用 `python-docx` 库提供的公共 API 进行操作。例如,可以使用 `paragraph.style.name.startswith('Heading')` 来判断段落是否为标题。然后再根据标题级别查找对应的编号信息。这种方法更具可读性和稳定性。

希望以上信息能够帮助到你。如果你还有其他问题,请随时提问。
 楼主| SFTiger2022 发表于 2023-6-19 21:45
本帖最后由 SFTiger2022 于 2023-6-19 22:14 编辑
dfxc10 发表于 2023-6-19 08:15
paragraph._element.xpath('.//w:numPr')来获取段落中的编号信息,而不需要使用namespaces参数。例如:
fr ...

谢了!但是不行的,这样得到的num_prop是空
 楼主| SFTiger2022 发表于 2023-6-19 21:48
本帖最后由 SFTiger2022 于 2023-6-19 22:14 编辑
OmJJWang 发表于 2023-6-19 12:58
这个是AI的回答,我觉得能够解答你的疑问。

报错的原因是`python-docx`库的版本问题导致的。在较早的版 ...

谢了!但是不行的,这个和python-docx版本无关,我已经用最新版的python-docx了,这段代码就是出现我帖子的错误的。
 楼主| SFTiger2022 发表于 2023-6-19 22:25
saszznz 发表于 2023-6-19 10:34
方便的话把world文档发上来

帖子不能放DOCX,百度云链接:https://pan.baidu.com/s/1xacEAxLJr17WYj0f3MaUFw?pwd=irt3
提取码:irt3
头像被屏蔽
saszznz 发表于 2023-6-20 12:09
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| SFTiger2022 发表于 2023-6-20 21:35
saszznz 发表于 2023-6-20 12:09
看了源码 因为xpath方法不接收namespace参数  所以肯定报错
1 我修改了源码强制接受你的参数 检索的结果 ...

谢了!这个思路不错,根据标题级别来给它再次生成编号,但这样就只能是从1开始的才行啦……不够完美,谢了!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 23:03

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表