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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
云数据库 RDS PostgreSQL,高可用系列 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;
目录
相关文章
|
21天前
|
SQL 关系型数据库 MySQL
如何将Excel表的数据导入RDS MySQL数据库?
本文介绍如何通过数据管理服务DMS将Excel文件(转为CSV格式)导入RDS MySQL数据库,涵盖建表、编码设置、导入模式选择及审批执行流程,并提供操作示例与注意事项。
|
3月前
|
关系型数据库 MySQL Java
字节面试: MySQL 百万级 导入发生的 “死锁” 难题如何解决?“2序4拆”,彻底攻克
字节面试: MySQL 百万级 导入发生的 “死锁” 难题如何解决?“2序4拆”,彻底攻克
字节面试: MySQL 百万级 导入发生的 “死锁” 难题如何解决?“2序4拆”,彻底攻克
|
3月前
|
API 数据安全/隐私保护 开发者
企业微信自动加好友软件,导入手机号批量添加微信好友,python版本源码分享
代码展示了企业微信官方API的合规使用方式,包括获取access_token、查询部门列表和创建用户等功能
|
7月前
|
Shell Python
[oeasy]python072_名字空间是怎么玩的_from_import_as_导入_namespace
本文介绍了Python中名字空间和模块导入的使用方法。主要内容包括: 1. **回忆上次内容**:回顾了之前导入系统模块(如`__hello__`、`time`)和自定义模块(如`my_file`),并介绍了如何导入和使用模块中的变量。 2. **从shell开始**:展示了如何在命令行中编辑和切换文件,以及如何通过`import`语句引入模块。 3. **修改oeasy.py**:演示了如何通过`import my_file`导入模块,并将模块中的`pi`赋值给本地变量`pi`。 4. **locals()函数**:解释了如何使用`locals()`查看当前作用域内的本地变量及其值。
105 9
|
7月前
|
人工智能 自然语言处理 Shell
[oeasy]python070_如何导入模块_导入模块的作用_hello_dunder_双下划线
本文介绍了如何在Python中导入模块及其作用,重点讲解了`__hello__`模块的导入与使用。通过`import`命令可以将外部模块引入当前环境,增强代码功能。例如,导入`__hello__`模块后可输出“Hello world!”。此外,还演示了如何使用`help()`和`dir()`函数查询模块信息,并展示了导入多个模块的方法。最后,通过一个实例,介绍了如何利用`jieba`、`WordCloud`和`matplotlib`模块生成词云图。总结来说,模块是封装好的功能部件,能够简化编程任务并提高效率。未来将探讨如何创建自定义模块。
87 8
|
8月前
|
SQL 关系型数据库 MySQL
Python中使用MySQL模糊查询的方法
本文介绍了两种使用Python进行MySQL模糊查询的方法:一是使用`pymysql`库,二是使用`mysql-connector-python`库。通过这两种方法,可以连接MySQL数据库并执行模糊查询。具体步骤包括安装库、配置数据库连接参数、编写SQL查询语句以及处理查询结果。文中详细展示了代码示例,并提供了注意事项,如替换数据库连接信息、正确使用通配符和关闭数据库连接等。确保在实际应用中注意SQL注入风险,使用参数化查询以保障安全性。
|
10月前
|
关系型数据库 MySQL Linux
Linux下mysql数据库的导入与导出以及查看端口
本文详细介绍了在Linux下如何导入和导出MySQL数据库,以及查看MySQL运行端口的方法。通过这些操作,用户可以轻松进行数据库的备份与恢复,以及确认MySQL服务的运行状态和端口。掌握这些技能,对于日常数据库管理和维护非常重要。
371 8
|
10月前
|
关系型数据库 MySQL 数据库
Python处理数据库:MySQL与SQLite详解 | python小知识
本文详细介绍了如何使用Python操作MySQL和SQLite数据库,包括安装必要的库、连接数据库、执行增删改查等基本操作,适合初学者快速上手。
984 15
|
10月前
|
SQL 关系型数据库 MySQL
MySQL导入.sql文件后数据库乱码问题
本文分析了导入.sql文件后数据库备注出现乱码的原因,包括字符集不匹配、备注内容编码问题及MySQL版本或配置问题,并提供了详细的解决步骤,如检查和统一字符集设置、修改客户端连接方式、检查MySQL配置等,确保导入过程顺利。
|
11月前
|
数据采集 数据可视化 数据处理
如何使用Python实现一个交易策略。主要步骤包括:导入所需库(如`pandas`、`numpy`、`matplotlib`)
本文介绍了如何使用Python实现一个交易策略。主要步骤包括:导入所需库(如`pandas`、`numpy`、`matplotlib`),加载历史数据,计算均线和其他技术指标,实现交易逻辑,记录和可视化交易结果。示例代码展示了如何根据均线交叉和价格条件进行开仓、止损和止盈操作。实际应用时需注意数据质量、交易成本和风险管理。
472 5

推荐镜像

更多