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多线程用法实例详解
Jan 15 Python
python实现备份目录的方法
Aug 03 Python
Python模块WSGI使用详解
Feb 02 Python
Python爬虫小技巧之伪造随机的User-Agent
Sep 13 Python
python3实现多线程聊天室
Dec 12 Python
python 实现将txt文件多行合并为一行并将中间的空格去掉方法
Dec 20 Python
matplotlib绘制多个子图(subplot)的方法
Dec 03 Python
PyQt5多线程刷新界面防假死示例
Dec 13 Python
Pytorch中膨胀卷积的用法详解
Jan 07 Python
Python小白垃圾回收机制入门
Jun 09 Python
python开发前景如何
Jun 11 Python
Python下载网易云歌单歌曲的示例代码
Aug 12 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
PHP $_FILES中error返回值详解
2014/01/30 PHP
php过滤敏感词的示例
2014/03/31 PHP
phpcms手机内容页面添加上一篇和下一篇
2015/06/05 PHP
php遍历目录下文件并按修改时间排序操作示例
2019/07/12 PHP
初学Javascript的一些总结
2008/11/03 Javascript
js Event对象的5种坐标
2011/09/12 Javascript
你的 mixin 真的兼容 ECMAScript 5 吗?
2013/04/11 Javascript
JavaScript小技巧整理
2015/12/30 Javascript
Javascript 字符串模板的简单实现
2016/02/13 Javascript
JavaScript必知必会(三) String .的方法来自何方
2016/06/08 Javascript
jQuery中值得注意的trigger方法浅析
2016/12/12 Javascript
JS中如何实现点击a标签返回页面顶部的问题
2017/01/19 Javascript
JS基于正则截取替换特定字符之间字符串操作示例
2017/02/03 Javascript
async/await与promise(nodejs中的异步操作问题)
2017/03/03 NodeJs
Bootstrap栅格系统的使用详解
2017/10/30 Javascript
详解vue.js数据传递以及数据分发slot
2018/01/20 Javascript
vue动态添加路由addRoutes之不能将动态路由存入缓存的解决
2019/02/19 Javascript
Vue将props值实时传递 并可修改的操作
2020/08/09 Javascript
[03:47]2015国际邀请赛第三日现场精彩回顾
2015/08/08 DOTA
简单介绍Python中的filter和lambda函数的使用
2015/04/07 Python
Python实现TCP协议下的端口映射功能的脚本程序示例
2016/06/14 Python
python实现从wind导入数据
2019/12/03 Python
Window系统下Python如何安装OpenCV库
2020/03/05 Python
python压包的概念及实例详解
2021/02/17 Python
python编写扎金花小程序的实例代码
2021/02/23 Python
Rhone官方网站:男士运动服装、健身服装和高级运动服
2019/05/01 全球购物
大学生涯自我鉴定
2014/01/16 职场文书
缓刑人员思想汇报
2014/10/11 职场文书
对外汉语专业大学生职业生涯规划书
2014/10/11 职场文书
群众路线批评与自我批评发言稿
2014/10/16 职场文书
夫妻双方自愿离婚协议书怎么写
2014/12/01 职场文书
项目负责人岗位职责
2015/02/15 职场文书
2015年乡镇妇联工作总结
2015/05/19 职场文书
大学生入党自传2015
2015/06/26 职场文书
Win10 和 Win11可以共存吗? win10/11产品生命周期/服务更新介绍
2021/11/21 数码科技
Vue中Object.assign清空数据报错的解决方案
2022/03/03 Vue.js