最近接触到一个需求:需要将行业标准中定义的元数据【如交通运输行业标准–交通信息基础数据元】导入到系统中,
行业标准是docx文档。
想利用程序自动将元数据转换为CSV文件甚至SQL语句,减少项目实施中的工作量。
python-docx是一个用于创建和更新Microsoft Word (.docx)文件的Python库
使用python-docx 可以方便的获取文档段落内容 及 表格信息
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import re
from docx import document
def printTable(doc):
tables = doc.tables #获取文件中的表格集
for table in tables:
for row in table.rows: # 从表格第一行开始循环读取表格数据
cols = []
for cell in row.cells:
cols.append(cell.text)
printMsg(','.join(cols))
def printParagaphs(doc):
paragraphs = doc.paragraphs
'''
只打印元数据目录名称及定义的内容
元数据目录,类似于'4. 3. 1. 7 基层层数
元数据目录下是具体的元数据定义,类似于
分类编号:GL010100001
数据元名称:路线编号
英文名称:HighwayRouteNumber
中文全拼:lu-xian-bian-hao
注意: 三个正则表达式,需要根据实际情况进行调整
'''
metaDirRe = re.compile(r'[s.1-9]{10,}')
nometaDirRe = re.compile(r'[s.1-9]{1,9}')
endmetaDirRe = re.compile(r'公路信息基础数据元值域代码集')
isContinue = False
for i in range(len(paragraphs)):
content = paragraphs[i].text
if metaDirRe.match(content):
isContinue = True
elif nometaDirRe.match(content):
isContinue = False
elif endmetaDirRe.match(content):
isContinue = False
if isContinue:
printMsg(content)
space_patten = re.compile(r'([u4e00-u9fa5])s+([u4e00-u9fa5])')
def printMsg(content):
content = space_patten.sub(r'12', content).replace('n', '').replace('r', '')
if len(content) > 5:
print(content)
fileName='交通信息基础数据元+第2部分:公路信息基础数据元.docx'
document = document(fileName) #读入文件
# printTable(document)
printParagaphs(document)
参考
python-docx
python-docx documentation



