Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从python docx中删除粗体字_Python_Python Docx - Fatal编程技术网

如何从python docx中删除粗体字

如何从python docx中删除粗体字,python,python-docx,Python,Python Docx,我有一个docx,我需要使用spaCy进行预处理。我需要删除文档中以粗体显示的所有单词 我尝试了以下方法: def delete_paragraph(paragraph): p = paragraph._element p.getparent().remove(p) p._p = p._element = None length = len(document.paragraphs) for i in range(0,length): for j in range(0,len(docume

我有一个docx,我需要使用spaCy进行预处理。我需要删除文档中以粗体显示的所有单词

我尝试了以下方法:

def delete_paragraph(paragraph):
p = paragraph._element
p.getparent().remove(p)
p._p = p._element = None


length = len(document.paragraphs)
for i in range(0,length):
  for j in range(0,len(document.paragraphs[i].runs)):
     if document.paragraphs[i].runs[j].bold == True:
        delete_paragraph(document.paragraphs[i])
        length = length-1
        continue
document.save("/home/nikita/Desktop/Internship/new topic_mod/AXIS new.docx")
但我得到了以下错误:

IndexError: Traceback (most recent call last)
<ipython-input-12-d144bd42e95e> in <module>()
  3     #print(document.paragraphs[i].text)
  4     for j in range(0,len(document.paragraphs[i].runs)):
----> 5         if document.paragraphs[i].runs[j].bold == True:
  6             delete_paragraph(document.paragraphs[i])
  7             length = length-1

IndexError: list index out of range
索引器错误:回溯(最近一次调用)
在()
3#打印(文件.段落[i].文本)
对于范围(0,len(document.段落[i].运行))内的j,为4:
---->5如果document.parations[i]运行[j]。粗体==True:
6删除第段(文件第[i]段)
7长度=长度-1
索引器:列表索引超出范围
我不明白为什么它超出了范围。 如何从python docx中删除粗体字


请帮忙

可能有两个原因:

  • 删除段落后,您需要中断(而不是
    continue
    )内部循环,否则,如果同一段落有多个粗体段,您将尝试多次删除该段落

    for j in range(0,len(document.paragraphs[i].runs)):
        if document.paragraphs[i].runs[j].bold == True:
            delete_paragraph(document.paragraphs[i])
            length = length-1
            break
    
  • 每次删除一个段落时,您的段落列表都会变短,这会更改后面每个段落的索引。如果你从下到上遍历这些段落,那就不会有问题。此外,您可以放弃所有(i,j)索引管理;Python很少需要这样做

    for paragraph in reversed(list(document.paragraphs)):
        for run in paragraph.runs:
            if run.bold:
                delete_paragraph(paragraph)
                break
    

  • 欢迎来到Stack Exchange Kiera。如果答案回答了你的问题,不要忘记接受它。这就是回答者花时间回答你的问题的方式:)谢谢:)我确实接受了你的回答(多次),但由于我在这里相对较新,仍在学习,我没有所需的声誉。因此,当我接受它时,它会说:“谢谢你的反馈。那些声誉低于15的人所投的票会被记录下来,但不会改变公开显示的帖子分数”:(:(复选标记图标是用于接受的图标。箭头键上下投票,不会立即激活:)哦,我不知道!谢谢:)