程序目的:使用python将一个段落按照其中的编号顺序进行分成若干段落
word格式文档形如:
1、段落1内容
2、段落1内容2<包含图片内容>
3、段落1内容
有些word看似上边内容是不同的段落,但其实是同一个段落,也就是同一个paragraph,我们的目的是要将这些按照序号标题进行拆分成不同word,这就需要这些内容属于不同的paragraph,最初是在段中各片段(run)有序列号的前方加入’\r\n‘ ,也就是回车,无法实现,因为这是软回车,没法进行实质性的分段,加入后三行内容还是一个段落。
最后换个思路,用paragraph.insertpara_before()方法。将该段text内容按照编号进行分组保存到数组中,然后用For循环以此添加paragraph,加完之后删除原段落。
这样做到的目的主要是避免对文档中的图片进行操作。毕竟docx这个库功能有限,没法对图像进行更多的处理。遇到类似的朋友可以参考该方法。
参考代码如下:
getForatStrListByPatternList(p_text_line, orderNumPatternList)
该函数为查找p_text_line字符与pattern orderNumPatternList进行正则匹配的数组。返回一个数组
def formatDocParagraph(docfile,orderNumPatternList):
# 将word文档中进行段落划分,有些文档序列编号都在一个Paragraph中,将它们分到不同的段落中
doc=Document(docfile)
for idx ,para in enumerate(doc.paragraphs):
p_text = para.text.strip()
new_p_text = ''
p_text_line=''
p_text_list = p_text.split('\n')
para_newList=[]
if len(p_text_list) > 0:
for p_text_line in p_text_list :
tmplist = getForatStrListByPatternList(p_text_line, orderNumPatternList)
if str(p_text_line[:1]).strip() in delCharList and len(tmplist) > 0:
if len(new_p_text)>0:
para_newList.append(new_p_text)
new_p_text=''
new_p_text=p_text_line
else:
new_p_text=new_p_text+'\n'+p_text_line
para_newList.append(new_p_text)
if len(para_newList)>1:
for p_txt in para_newList:
para.insert_paragraph_before(p_txt)
#删除自己
clearDocParagraph(para)
doc.save(docfile)
del doc
遇到了这个问题,网络上查了没用找到答案,在此记录一下看,希望对您有所帮助。