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

本文涉及的产品
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDSClaw,2核4GB
简介: 用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或者加粗没有做处理。如果样式需要还原更详细的话可以自己写一写,毕竟我这个只是个引子。

表达能力不强敬请见谅。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
6月前
|
SQL 关系型数据库 数据库
Python SQLAlchemy模块:从入门到实战的数据库操作指南
免费提供Python+PyCharm编程环境,结合SQLAlchemy ORM框架详解数据库开发。涵盖连接配置、模型定义、CRUD操作、事务控制及Alembic迁移工具,以电商订单系统为例,深入讲解高并发场景下的性能优化与最佳实践,助你高效构建数据驱动应用。
758 7
|
6月前
|
XML 数据格式 Python
从手动编辑到代码生成:Python 助你高效创建 Word 文档
本文介绍如何用Python实现Word文档自动化生成,结合python-docx、openpyxl和matplotlib库,高效完成报告撰写、数据插入与图表生成,大幅提升办公效率,降低格式错误,实现数据驱动的文档管理。
907 2
|
7月前
|
数据采集 关系型数据库 MySQL
python爬取数据存入数据库
Python爬虫结合Scrapy与SQLAlchemy,实现高效数据采集并存入MySQL/PostgreSQL/SQLite。通过ORM映射、连接池优化与批量提交,支持百万级数据高速写入,具备良好的可扩展性与稳定性。
|
7月前
|
存储 数据库 开发者
Python SQLite模块:轻量级数据库的实战指南
本文深入讲解Python内置sqlite3模块的实战应用,涵盖数据库连接、CRUD操作、事务管理、性能优化及高级特性,结合完整案例,助你快速掌握SQLite在小型项目中的高效使用,是Python开发者必备的轻量级数据库指南。
616 0
|
8月前
|
监控 Linux 数据安全/隐私保护
Python实现Word转PDF全攻略:从入门到实战
在数字化办公中,Python实现Word转PDF自动化,可大幅提升处理效率,解决格式兼容问题。本文详解五种主流方案,包括跨平台的docx2pdf、Windows原生的pywin32、服务器部署首选的LibreOffice命令行、企业级的Aspose.Words,以及轻量级的python-docx+pdfkit组合。每种方案均提供核心代码与适用场景,并涵盖中文字体处理、表格优化、批量进度监控等实用技巧,助力高效办公自动化。
1730 0
|
9月前
|
XML Linux 区块链
Python提取Word表格数据教程(含.doc/.docx)
本文介绍了使用LibreOffice和python-docx库处理DOC文档表格的方法。首先需安装LibreOffice进行DOC到DOCX的格式转换,然后通过python-docx读取和修改表格数据。文中提供了详细的代码示例,包括格式转换函数、表格读取函数以及修改保存功能。该方法适用于Windows和Linux系统,解决了老旧DOC格式文档的处理难题,为需要处理历史文档的用户提供了实用解决方案。
1057 1
|
9月前
|
Python
Python 办公实战:用 python-docx 自动生成 Word 文档
本文详解如何使用 python-docx 库实现 Word 文档自动化生成,涵盖环境搭建、文档创建、格式设置、表格与图片处理、模板填充、批量生成及性能优化等实战技巧,助你高效完成办公场景中的文档自动化任务。
2107 1
|
11月前
|
SQL 数据库 开发者
Python中使用Flask-SQLAlchemy对数据库的增删改查简明示例
这样我们就对Flask-SQLAlchemy进行了一次简明扼要的旅程,阐述了如何定义模型,如何创建表,以及如何进行基本的数据库操作。希望你在阅读后能对Flask-SQLAlchemy有更深入的理解,这将为你在Python世界中从事数据库相关工作提供极大的便利。
906 77
|
数据库 Python
【YashanDB知识库】python驱动查询gbk字符集崖山数据库CLOB字段,数据被驱动截断
【YashanDB知识库】python驱动查询gbk字符集崖山数据库CLOB字段,数据被驱动截断
|
SQL 关系型数据库 数据库连接

推荐镜像

更多
下一篇
开通oss服务