python将word(doc或docx)的内容导入mysql数据库

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 用python先把doc文件转换成docx文件(这一步也可以不要后续会说明),然后读取docx的文件并另存为htm格式的文件(上一步可以直接把doc文件另存为htm),python根据bs4获取p标签里的内容,如果段落中有图片则保存图片。(图片在word文档中的位置可以很好的还原到生成的数据库内容)我见网上有把docx压缩后解压获取图片的,然后根据在根据xml来读取图片的位置,我觉得比较繁琐。用docx模块读取段落的时候还需要是不是判断段落中有分页等,然而转成htm之后就不用判断那么多直接判断段落里的样式或者图片等就可以了。

 需求:python操作word文档并把doc或者docx文档中的内容插入到mysql的数据库中(段落跟图片位置保持一致)

解决方法:用python先把doc文件转换成docx文件(这一步也可以不要后续会说明),然后读取docx的文件并另存为htm格式的文件(上一步可以直接把doc文件另存为htm),python根据bs4获取p标签里的内容,如果段落中有图片则保存图片。(图片在word文档中的位置可以很好的还原到生成的数据库内容)

我见网上有把docx压缩后解压获取图片的,然后根据在根据xml来读取图片的位置,我觉得比较繁琐。用docx模块读取段落的时候还需要是不是判断段落中有分页等,然而转成htm之后就不用判断那么多直接判断段落里的样式或者图片等就可以了。

代码:

doc批量转换成docx文档

def findAllDoc(self):
        files = 'D:\\修改的文章'
        w = wc.gencache.EnsureDispatch('Word.Application')
        for root,ds,fs in os.walk(files):
            
            for f in fs:
                if f.endswith('.doc'):
                    name = os.path.join(root+'\\',f)#必须是此形式的不然会有部分文档打开报错找不到文档
                    doc = w.Documents.Open("{}".format(name))#打开word文档
                    doc.SaveAs2("{}x".format(name), 12)#另存为
                    doc.Close()
                    sqlIn = 'INSERT post_temp_doc3 SET name = "%s"' % (name)
                    self.cursor.execute(sqlIn)
                    self.cursor.connection.commit()
                    #转换成功删除doc文档
                    if os.path.exists(name):
                        os.remove(name)
                        print('删除成功%s' % name)
                    else:
                        print('已经删除文件')   
        w.Quit()

image.gif

docx转htm并读取内容插入到数据库

def findAllFile(self):
        files = 'D:\\修改的文章\\'
        uploads = 'uploads/images/post/'
        htmlFile = "D:/1/1.htm"
        folderFile = "D:/1/1.files"
        w = wc.gencache.EnsureDispatch('Word.Application')
        for root,ds,fs in os.walk(files):
            for f in fs:
                if f.endswith('.docx'):
                    docxFile = os.path.join(root,f) 
                    doc = w.Documents.Open("{}".format(docxFile))             
                    doc.SaveAs2(htmlFile, 8)#转成htm的参数是8参数详细请参考https://docs.microsoft.com/zh-cn/office/vba/api/word.wdsaveformat
                    doc.Close()
                    title = f.replace('.docx', '')
                    content = ''
                    #打开htm文件必须是二进制否则编码的问题会很让你头疼
                    with open(htmlFile, 'rb') as htmls:
                        htmlRead = htmls.read()
                        htmlData = BeautifulSoup(htmlRead, 'lxml')
                        htmlP = htmlData.find_all('p')
                        for pList in htmlP:
                            imgList = pList.find_all('img')
                            if imgList :
                                for img in imgList:
                                    imgFile = img.get("src")
                                    imgType = imgFile.replace('1.files/', '').partition('.')#获取图片后缀
                                    fileWrite = files.replace('\\', '/')
                                    with open(fileWrite+imgFile, 'rb') as imgr:
                                        imgSrc = fileWrite+uploads+str(int(time.time()))+imgType[1]+imgType[2]
                                        with open(imgSrc, 'wb')as imgw:
                                            imgw.write(imgr.read())
                                            content += '<p><img src="%s"></p>' % imgSrc.replace(fileWrite, '')
                            else:
                                content += '<p>%s</p>' % pList.text.replace("'", '&#39;')#转义单引号不然有单引号的内容插入数据库时会报错
                    sqlIn = 'INSERT post_temp1 SET  title = "%s" , content = \'%s\'' % (title,content)
                    print(sqlIn)
                    self.cursor.execute(sqlIn)
                    self.cursor.connection.commit()
                    
                    if os.path.exists(docxFile):
                        os.remove(docxFile)#删除docx文档
                    if os.path.exists(htmlFile):
                        os.remove(htmlFile)#删除1.htm文档
                        shutil.rmtree(folderFile)#删除文件夹
        w.Quit()

image.gif

我做的这个比较简单就是段落和图片插入到数据库生成的文章的时候位置不变,至于其他的像span或者加粗没有做处理。如果样式需要还原更详细的话可以自己写一写,毕竟我这个只是个引子。

表达能力不强敬请见谅。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2月前
|
SQL 关系型数据库 MySQL
MySQL操作利器——mysql-connector-python库详解
MySQL操作利器——mysql-connector-python库详解
507 0
|
10天前
|
数据采集 数据可视化 数据处理
如何使用Python实现一个交易策略。主要步骤包括:导入所需库(如`pandas`、`numpy`、`matplotlib`)
本文介绍了如何使用Python实现一个交易策略。主要步骤包括:导入所需库(如`pandas`、`numpy`、`matplotlib`),加载历史数据,计算均线和其他技术指标,实现交易逻辑,记录和可视化交易结果。示例代码展示了如何根据均线交叉和价格条件进行开仓、止损和止盈操作。实际应用时需注意数据质量、交易成本和风险管理。
29 5
|
27天前
|
关系型数据库 MySQL 数据库
Mysql学习笔记(四):Python与Mysql交互--实现增删改查
如何使用Python与MySQL数据库进行交互,实现增删改查等基本操作的教程。
55 1
|
1月前
|
SQL 存储 关系型数据库
SQL文件导入MySQL数据库的详细指南
数据库中的数据转移是一项常规任务,无论是在数据迁移过程中,还是在数据备份、还原场景中,导入导出SQL文件显得尤为重要。特别是在使用MySQL数据库时,如何将SQL文件导入数据库是一项基本技能。本文将详细介绍如何将SQL文件导入MySQL数据库,并提供一个清晰、完整的步骤指南。这篇文章的内容字数大约在
67 1
|
2月前
|
SQL 关系型数据库 MySQL
30天拿下Python之使用MySQL
30天拿下Python之使用MySQL
42 0
|
2月前
|
关系型数据库 MySQL 数据管理
pymysql:Python操作MySQL数据库的又一利器
pymysql:Python操作MySQL数据库的又一利器
22 0
|
2月前
|
SQL 关系型数据库 MySQL
Python小技巧——将CSV文件导入到MySQL数据库
Python小技巧——将CSV文件导入到MySQL数据库
37 0
|
2月前
|
Python
python一键导出/导入pip库
python一键导出/导入pip库
77 0
|
10天前
|
设计模式 开发者 Python
Python编程中的设计模式:工厂方法模式###
本文深入浅出地探讨了Python编程中的一种重要设计模式——工厂方法模式。通过具体案例和代码示例,我们将了解工厂方法模式的定义、应用场景、实现步骤以及其优势与潜在缺点。无论你是Python新手还是有经验的开发者,都能从本文中获得关于如何在实际项目中有效应用工厂方法模式的启发。 ###
|
3天前
|
存储 人工智能 数据挖掘
从零起步,揭秘Python编程如何带你从新手村迈向高手殿堂
【10月更文挑战第32天】Python,诞生于1991年的高级编程语言,以其简洁明了的语法成为众多程序员的入门首选。从基础的变量类型、控制流到列表、字典等数据结构,再到函数定义与调用及面向对象编程,Python提供了丰富的功能和强大的库支持,适用于Web开发、数据分析、人工智能等多个领域。学习Python不仅是掌握一门语言,更是加入一个充满活力的技术社区,开启探索未知世界的旅程。
12 5

热门文章

最新文章