# pip install python-docx
import docx
def Stack():
def __init__(self):
self.items = []
def is_empty(self):
return self.items == []
def push(self, item):
return self.items.append(item)
def pop(self):
return self.items.pop()
def peek(self):
return self.items[len(self.items) - 1]
def size(self):
return len(self.items)
for i in files:
doc = docx.Document(i)
stack = Stack()
res = []
tmp_content = []
for i ,j in enumerate(doc.paragraphs):
if j.text == '': continue
item = {}
record = {}
style_name = j.style.name
# 如果当前过来的是标题,则将当前标题之前的内容写入ES
if style_name.startswith('Heading'):
if style_name.startswith('Heading1'):
item['style'] = 1
item['text'] = j.text
elif style_name.startswith('Heading2'):
item['style'] = 2
item['text'] = j.text
elif style_name.startswith('Heading3'):
item['style'] = 3
item['text'] = j.text
# 如果当前标题之前的正文内容不为空
# 1、合并多个正文段落
# 2、合并多级标题
if tmp_content != []:
# 写入ES
content = ' '.join(tmp_content)
title = ''
for i in range(stack.size()):
title_text = stack.items[i]
text = title_text['text']
title = title + '-' + text
record['title'] = title
record['content'] = content
tmp_content = []
# 清空栈
# 取出栈顶元素,与当前标题对比,如果栈顶标题的级别 >= 当前标题,则清除,直到小于当前标题
while not stack.is_empty():
top = stack.peek()
top_style = top['style']
if top_style >= item['style']:
stack.pop()
else:
break
# 压入当前标题
stack.push(item)
# 如果当前过来的是正文,则放到正文的临时列表
elif style_name.startswith('Normal'):
tmp_text = j.text.strip('\n')
tmp_text = tmp_text.strip(' ')
tmp_content.append(tmp_text)
for i ,item in enumerate(res):
if item['title'] != '' and len(item['content']) != 0:
title_strip = item['title'].strip('-')
insert_es() # 待续
python-docx
?著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 背景 因为工作原因,需要经常往两个word模板里填写内容并生成新的word文件,模板大致如下图: 老的工作流程: ...
- 1 基本用法 运行结果: 段落数:2第一段内容文本=概要设计说明书又可称系统设计说明书。第一段内容中的 Run 对...
- 1 安装 首先通过 pip 安装 python-docx,命令为 pip install python-docx。...
- Text文本概念 理解块级(Block-level)元素(如段落paragraph)和内联级(inline-lev...