Python读取excel中的图片完美解决方法


Posted in Python onJuly 27, 2018

excel中有图片是很常见的,但是通过python读取excel中的图片没有很好的解决办法。

网上找了一种很聪明的方法,原理是这样的:

1、将待读取的excel文件后缀名改成zip,变成压缩文件。

2、再解压这个文件。

3、在解压后的文件夹中,就有excel中的图片。

4、这样读excel中的图片,就变成了读文件夹中的图片了,和普通文件一样,可以做各种处理。

解压后的压缩包如下:

Python读取excel中的图片完美解决方法

python脚本如下:

'''
 File Name:  readexcelimg
 Author:   tim
 Date:    2018/7/26 19:52
 Description: 读取excel中的图片,打印图片路径
   先将excel转换成zip包,解压zip包,包下面有文件夹存放了图片,读取这个图片
 ''' 
 import os
 import zipfile
 # 判断是否是文件和判断文件是否存在
 def isfile_exist(file_path):
   if not os.path.isfile(file_path):
     print("It's not a file or no such file exist ! %s" % file_path)
     return False
   else:
     return True
 # 修改指定目录下的文件类型名,将excel后缀名修改为.zip
 def change_file_name(file_path, new_type='.zip'):
   if not isfile_exist(file_path):
     return ''
   extend = os.path.splitext(file_path)[1] # 获取文件拓展名
   if extend != '.xlsx' and extend != '.xls':
     print("It's not a excel file! %s" % file_path)
     return False
   file_name = os.path.basename(file_path) # 获取文件名
   new_name = str(file_name.split('.')[0]) + new_type # 新的文件名,命名为:xxx.zip
   dir_path = os.path.dirname(file_path) # 获取文件所在目录
   new_path = os.path.join(dir_path, new_name) # 新的文件路径
   if os.path.exists(new_path):
     os.remove(new_path)
   os.rename(file_path, new_path) # 保存新文件,旧文件会替换掉
   return new_path # 返回新的文件路径,压缩包
 # 解压文件
 def unzip_file(zipfile_path):
   if not isfile_exist(zipfile_path):
     return False
   if os.path.splitext(zipfile_path)[1] != '.zip':
     print("It's not a zip file! %s" % zipfile_path)
     return False
   file_zip = zipfile.ZipFile(zipfile_path, 'r')
   file_name = os.path.basename(zipfile_path) # 获取文件名
   zipdir = os.path.join(os.path.dirname(zipfile_path), str(file_name.split('.')[0])) # 获取文件所在目录
   for files in file_zip.namelist():
     file_zip.extract(files, os.path.join(zipfile_path, zipdir)) # 解压到指定文件目录
   file_zip.close()
   return True
 # 读取解压后的文件夹,打印图片路径
 def read_img(zipfile_path):
   if not isfile_exist(zipfile_path):
     return False
   dir_path = os.path.dirname(zipfile_path) # 获取文件所在目录
   file_name = os.path.basename(zipfile_path) # 获取文件名
   pic_dir = 'xl' + os.sep + 'media' # excel变成压缩包后,再解压,图片在media目录
   pic_path = os.path.join(dir_path, str(file_name.split('.')[0]), pic_dir)
   file_list = os.listdir(pic_path)
   for file in file_list:
     filepath = os.path.join(pic_path, file)
     print(filepath)
 # 组合各个函数
 def compenent(excel_file_path):
   zip_file_path = change_file_name(excel_file_path)
   if zip_file_path != '':
     if unzip_file(zip_file_path):
       read_img(zip_file_path)
 # main
 if __name__ == '__main__':
   compenent('/Users/Desktop/test/people.xlsx')

总结

以上所述是小编给大家介绍的Python读取excel中的图片完美解决方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
打印出python 当前全局变量和入口参数的所有属性
Jul 01 Python
Python实现打印螺旋矩阵功能的方法
Nov 21 Python
Python各类图像库的图片读写方式总结(推荐)
Feb 23 Python
Pycharm连接远程服务器并实现远程调试的实现
Aug 02 Python
基于python全局设置id 自动化测试元素定位过程解析
Sep 04 Python
TensorFlow:将ckpt文件固化成pb文件教程
Feb 11 Python
Python基于codecs模块实现文件读写案例解析
May 11 Python
python获取百度热榜链接的实例方法
Aug 25 Python
如何完美的建立一个python项目
Oct 09 Python
基于Django快速集成Echarts代码示例
Dec 01 Python
python多线程爬取西刺代理的示例代码
Jan 30 Python
python实现简单的学生管理系统
Feb 22 Python
tensorflow实现图像的裁剪和填充方法
Jul 27 #Python
tensorflow 用矩阵运算替换for循环 用tf.tile而不写for的方法
Jul 27 #Python
对Tensorflow中的矩阵运算函数详解
Jul 27 #Python
python+influxdb+shell编写区域网络状况表
Jul 27 #Python
TensorFlow 合并/连接数组的方法
Jul 27 #Python
pytorch训练imagenet分类的方法
Jul 27 #Python
使用pytorch进行图像的顺序读取方法
Jul 27 #Python
You might like
学习discuz php 引入文件的方法DISCUZ_ROOT
2009/06/21 PHP
php 模拟POST提交的2种方法详解
2013/06/17 PHP
ThinkPHP V2.2说明文档没有说明的那些事实例小结
2015/07/01 PHP
列举PHP的Yii 2框架的开发优势
2015/07/03 PHP
PHP页面间传递值和保持值的方法
2016/08/24 PHP
javascript中字符串拼接需注意的问题
2010/07/13 Javascript
一个分享按钮的插件使用介绍(可扩展,内附开发制作流程)
2011/09/19 Javascript
JQuery判断子iframe何时加载完成解决方案
2013/08/20 Javascript
jQuery拖动元素并对元素进行重新排序
2015/12/30 Javascript
AngularJS创建自定义指令的方法详解
2016/11/03 Javascript
利用HTML5+Socket.io实现摇一摇控制PC端歌曲切换
2017/01/13 Javascript
基于JS递归函数细化认识及实用实例(推荐)
2017/08/07 Javascript
小程序实现展开/收起的效果示例
2018/09/22 Javascript
详解Vue webapp项目通过HBulider打包原生APP(vue+webpack+HBulider)
2019/02/02 Javascript
Vue.js数字输入框组件使用方法详解
2019/10/19 Javascript
[57:18]DOTA2上海特级锦标赛主赛事日 - 1 败者组第一轮#3VP VS VG
2016/03/03 DOTA
python基于Tkinter库实现简单文本编辑器实例
2015/05/05 Python
Python的Flask框架中配置多个子域名的方法讲解
2016/06/07 Python
python  Django中的apps.py的目的是什么
2018/10/15 Python
python取数作为临时极大值(极小值)的方法
2018/10/15 Python
python的pytest框架之命令行参数详解(下)
2019/06/27 Python
Python为何不能用可变对象作为默认参数的值
2019/07/01 Python
python元组和字典的内建函数实例详解
2019/10/22 Python
Python使用qrcode二维码库生成二维码方法详解
2020/02/17 Python
使用css3和jquery实现可伸缩搜索框
2014/02/12 HTML / CSS
html5 跨文档消息传输示例探讨
2013/04/01 HTML / CSS
AmazeUI 导航条的实现示例
2020/08/14 HTML / CSS
JSP和EJB可以共享HttpSession么?EJB里面可以改变session里面的内容
2013/06/05 面试题
大学毕业通用个人的求职信
2013/12/08 职场文书
给面试官的感谢信
2014/02/01 职场文书
赔偿协议书怎么写
2015/01/28 职场文书
初中英语教学随笔
2015/08/15 职场文书
七年级作文之下雨天
2019/12/23 职场文书
Go Gin实现文件上传下载的示例代码
2021/04/02 Golang
详解JAVA的控制语句
2021/11/11 Java/Android
MySQL池化框架学习接池自定义
2022/07/23 MySQL