我有一个需要使用spaCy进行预处理的docx。我需要删除文档中所有以粗体显示的单词。
我尝试了以下操作:
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
我不知道为什么它超出范围。 如何从python-docx中删除粗体字?
请帮助!
答案 0 :(得分:0)
有两个可能的原因:
删除段落后,需要从内循环中跳出(而不是Job
),否则,如果同一段落有多个粗体运行,则尝试多次删除同一段落。
continue
每次删除段落时,段落列表都会越来越短,这将更改随后的每个段落的索引。如果您从下至上遍历段落,那将不是问题。另外,您可以放弃所有(i,j)索引管理; Python很少需要它。
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