精华内容
下载资源
问答
  • 用Python3.0 xlrd pymysql 读取Excel内容并将信息存入mysql。
  • 主要介绍了Python读取Excel数据并生成图表过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • python读写excel文件有很多种方法: xlrd和xlwt进行excel读写 openpyxl进行excel读写 pandas进行excel读写 本文使用xlrd读取excel文件(xls,sxls格式),使用xlwt向excel写入数据 一、xlrd和xlwt的安装 安装...
  • excel里的日期型数据,用python读取出来是这样的: 坐标轴的显示肯定也是有问题的。 该方法就是修改excel数据类型。将日期类型数据修改为文本类型,一定要在数据前面加单引号,这样读取出来的数据
  • python读写excel文件

    2017-05-23 16:46:39
    python读写excel
  • 本文实例讲述了用python读写excel的方法。分享给大家供大家参考。具体如下: 最近需要从多个excel表里面各种方式整理一些数据,虽然说原来过java做这类事情,但是由于最近在学python,所以当然就决定用python...
  • excel中的图片非常常见,但是通过python读取excel中的图片没有很好的解决办法。今天小编给大家分享一种比较聪明的方法,感兴趣的朋友跟随脚本之家小编看看吧
  • 如何用Python读写Excel文件?最便捷的3种方式

    千次阅读 多人点赞 2019-09-10 21:57:07
    python读写excel的方式有很多,这里我介绍3种方式,一种是利用xlrd和xlwt进行excel读写,一种是openpyxl读写,最后一种是利用pandas进行读写,下面我主要介绍一下3种方式读写的过程,实验环境win7+python3.6+pycharm...

    python读写excel的方式有很多,这里我介绍3种方式,一种是利用xlrd和xlwt进行excel读写,一种是openpyxl读写,最后一种是利用pandas进行读写,下面我主要介绍一下3种方式读写的过程,实验环境win7+python3.6+pycharm5.0,主要步骤如下:

    为了方便演示,我这里新建了一个test.xls文件,主要内容如下,用于测试读excel的代码:

    方法一:利用xlrd和xlwt进行excel读写,这里只能是xls类型excel

    首先,安装的话,直接输入命令"pip install xlrd"和"pip install xlwt"就行,如下:

    xlrd读excel

    主要代码如下,主要包括读取行列和单元格的值,以及表格总行数和列数等,比较简单:


    如果你依然在编程的世界里迷茫,可以加入我们的Python学习扣qun:784758214,看看前辈们是如何学习的。交流经验。从基础的python脚本到web开发、爬虫、django、数据挖掘等,零基础到项目实战的资料都有整理。送给每一位python的小伙伴!分享一些学习的方法和需要注意的小细节,点击加入我们的 python学习者聚集地

    程序运行截图:

    xlwt写excel

    主要代码如下,很简单:

    程序运行后,save.xls文件内容截图如下:

    方法二:利用openpyxl读写excel,注意这里只能是xlsx类型的excel

    安装的话,直接输入命令"pip install openpyxl"就行,很快就能安装完毕。

    读excel

    主要代码如下:

    程序运行截图如下:

    写excel

    主要代码如下:

    程序运行后,new.xlsx保存的内容如下:

    方法三:利用pandas读取excel,这里就很简单了,pandas是一个数据处理的包,本身提供了许多读取文件的函数,像read_csv(读取csv文件),read_excel(读取excel文件)等,只需一行代码就能实现文件的读取

    读excel

    主要代码如下,就1行代码搞定,注意这里的data是DataFrame类型:

    程序运行截图如下:

    写excel

    主要代码如下:

    程序运行后,new.xls文件保存内容如下:

    至此,我们就完成了excel的读写。总的来说,这3种方法都很简单,尤其是第3种方法,1行代码就搞定,在数据处理中,经常会用到pandas这个包,功能很强大,当然还有许多其他的包也可以完成excel的读写,我这里就不一一详细列举了,希望以上分享的内容能对你有所帮助吧。

    在学习过程中有什么不懂得可以加我的
    python学习交流扣扣qun,784758214
    群里有不错的学习视频教程、开发工具与电子书籍。
    与你分享python企业当下人才需求及怎么从零基础学习好python,和学习什么内容
    
    需要导入xlwt和xlrd两个模块
    
    import xlwt
    
    import xlrd
    
    #读Excel文件
    
    workbook=xlrd.open_workbook(r'D:\test.xlsx')#打开Excel文件sheet=workbook.sheet_by_index(0) # sheet索引从0开始sheet_col=sheet.col_values(0)#得到第一列的内容
    
    #写Excel文件
    
    workbook=xlwt.Workbook()
    
    sheet1 = workbook.add_sheet('xlwt', cell_overwrite_ok=True)
    
    style = xlwt.XFStyle()#初始化样式
    
    # 创建字体样式
    
    font = xlwt.Font()font.name = 'Times New Roman'
    
    font.bold = True # 加粗
    
    #设置字体
    
    style.font = font
    
    for i in range(0, len(belong_place)):
    
    sheet1.write(i + 1, 0, sheet_col[i], style) # 号码
    
    sheet1.write(i + 1, 1, belong_place[i], style) # 归属地
    
    # 保存excel文件,有同名的直接覆盖
    
    workbook.save(r'D:\test1.xls')
    
    
    展开全文
  • 今天小编就为大家分享一篇python读取excel指定列数据并写入到新的excel方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 主要介绍了Python读写处理Excel表格,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 主要介绍了Python读取excel文件中带公式的值的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 主要介绍了python 读取excel时, 日期变成数字并加.0的问题,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
  • 那么你知道如何使用Python读取Excel中的图片?又如何使用Python直接往Excel中写入图片?甚至使用Python制作一个Excel可视化大屏? 因为图片的存储格式与数字数据格式不一样,所以实现起来稍显复杂,本文就将对以下...

    大家好,在使用Python进行办公自动化操作时,一定少不了与Excel表格的交互,我们通常是用pandas处理表格数据,但大多数情况下,都是读取表格中的数值进行分析。

    那么你知道如何使用Python读取Excel中的图片?又如何使用Python直接往Excel中写入图片?甚至使用Python制作一个Excel可视化大屏?

    因为图片的存储格式与数字数据格式不一样,所以实现起来稍显复杂,本文就将对以下两个部分进行深入讲解:

    • Python读取Excel图片
    • Python写入Excel图片

    涉及的Python模块有以下几个

    • PIL
    • win32
    • os
    • zipfile
    • numpy
    • xlsxwriter

      一、准备

    由于此次包比较多,我们需要在命令行中使用pip进行安装

    pip install pillow   #这是对模块PTL的安装
    pip install pypiwin32    #这是对win32的安装
    pip install os 
    pip install zipfile
    pip install numpy
    pip install xlsxwriter

    在下载的过程中,有些包是比较大的,会出现超时time out的报错现象。这里介绍几个国内的镜像,大家可以尝试其中一个,速度会比单纯的pip快10倍不止。地址如下:

    http://pypi.douban.com/simple/ 豆瓣
    http://mirrors.aliyun.com/pypi/simple/ 阿里
    http://pypi.hustunique.com/simple/ 华中理工大学
    http://pypi.sdutlinux.org/simple/ 山东理工大学
    http://pypi.mirrors.ustc.edu.cn/simple/ 中国科学技术大学
    https://pypi.tuna.tsinghua.edu.cn/simple 清华

    代码如下:

    pip install 模块名 -i 网址

    清华镜像举例

    pip install pillow -i https://pypi.tuna.tsinghua.edu.cn/simple

    注意:如果是原生态的cmd窗口安装的,会提示加个--user命令,读者按照指示即可。

      二、Python读取Excel图片

    上面说过,Python读取Excel图片有两种方法

    第一种:将xlsx后缀名改为zip形式,即进行压缩。而后读取里面存储图片的文件,将里面的图片取出来。

    第二种:用提取到粘贴板中的方法将图片保存到JPG、PNG等格式中

    两种方法各有缺点和优点,第一种方法缺点是代码量比较长,优点是万能,Excel的所有格式都可以运用。

    第二种的优点是代码量少,缺点是对于一些xlsx的文件运用不了

    首先我们先讲解第一种方法,之后在讲解第二种方法时,大家可以进行对比!

    讲解之前我们用的是以下的example.xlsx文件,里面有四个工作表,每个工作表都有一张数据可视化图。例如工作表3中的气泡图如下:

    2.1  方法一

    和之前的文章一样,我们先给出全部代码与效果图之后再进行讲解

    import os
    import zipfile
    import os
    from PIL import Image
    import numpy as np 
    path = r'D:'
    count = 1
    for file in os.listdir(path):
        new_file = file.replace(".xlsx",".zip")
        os.rename(os.path.join(path,file),os.path.join(path,new_file))
        count+=1
    print('总共有'+str(count)+'个文件夹')
    number = 0
    craterDir = "D:/"  # 存放zip文件的文件夹路径
    saveDir = "D:/"  # 存放图片的路径 
    list_dir = os.listdir(craterDir) 
    for i in range(len(list_dir)):
        if 'zip' not in list_dir[i]:
            list_dir[i] = ''
    while '' in list_dir:
        list_dir.remove('')    
    for zip_name in list_dir:
        print(zip_name)
        azip = zipfile.ZipFile(craterDir + zip_name)
        namelist = (azip.namelist())
     
        for idx in range(0,len(namelist)):
            if namelist[idx][:9] == 'xl/media/':#图片是在这个路径下
                img_name = saveDir + str(number)+'.jpg'
                f = azip.open(namelist[idx])
                img = Image.open(f)
                img = img.convert("RGB")
                img.save(img_name,"JPEG")
                number += 1
    azip.close()  #关闭文件,必须有,释放内存
    

    效果展现如下:

    可以看到example.xlsx里面的四张工作表里的图片都提取出来,保存在本地。

    现在我们进行代码解析,首先,引入相关包

    import os
    import zipfile
    from PIL import Image
    import numpy as np 
    

    其次,就是将xlsx格式结尾的文件夹进行压缩,转化成zip结尾的文件

    path = r'D:'   #excel文件位置
    count = 1
    for file in os.listdir(path):
        new_file = file.replace(".xlsx",".zip")
        os.rename(os.path.join(path,file),os.path.join(path,new_file))
        count+=1 
    

    这里首先设置了example.xlsx的文件位置,在D盘的根目录,读者需要做调整的话在path那行代码修改即可。

    其次用os模块的listdir函数用于返回指定的文件夹包含的文件或文件夹的名字的列表。再用for循环遍历这个列表,将.xlsx结尾的改为.zip结尾。

    同时再用os.rename()函数重命名对应的文件夹。count是用来告诉用户这个文件夹有多少个文件的,用于检验。

    最后,就是在这些压缩过后的文件中,提取图片。代码如下

    number = 0
    craterDir = "D:/"  # 存放zip文件的文件夹路径
    saveDir = "D:/"  # 存放图片的路径 
    list_dir = os.listdir(craterDir) # 获取所有的文件名
    
    for i in range(len(list_dir)):
        if 'zip' not in list_dir[i]:
            list_dir[i] = ''
    while '' in list_dir:
        list_dir.remove('')   
    

    下面是代码解析

    首先,number=0是用来最后命名图片的。craterDir是指存放zip的文件夹路径,saveDir指存放提取后的图片的指定路径。用os.listdir()函数来获取在这个路径下的所有文件名字。

    这里强调下,本章代码采用的路径,除了上面讲过的path外,其他都用绝对路径,因为如os模块和zipfile模块,这些模块用绝对路径更不会报错。

    下面用一个for循环加个while循环的用途是剔除不是.zip结尾的文件夹。这时有读者会问,用for循环加个列表del函数不香吗

    其实是不行的,大家可以去尝试一下。原因是,你每次del广域网一个列表的元素,列表的数量值会一直在变而不是固定的,这样就会导致超出索引的错误。

    for zip_name in list_dir:
        print(zip_name)
        # 默认模式r,读
        azip = zipfile.ZipFile(craterDir + zip_name)
        # 返回所有文件夹和文件
        namelist = (azip.namelist())
     
        for idx in range(0,len(namelist)):
            if namelist[idx][:9] == 'xl/media/':#图片是在这个路径下
                img_name = saveDir + str(number)+'.jpg'
                f = azip.open(namelist[idx])
                img = Image.open(f)
                img = img.convert("RGB")
                img.save(img_name,"JPEG")
                number += 1
    azip.close()  #关闭文件,必须有,释放内存
    

    最后就是读取zip文件中的图片。用for循环遍历我们已经处理过的list——dir列表,得到zip文件名,再用zipfile.ZipFile()函数来打开我们zip文件。其中azip.namelist()函数是用来装zip文件里面所有文件的文件名列表。

    接下来可以进入到zip文件中仔细观察,可以发现我们所需要的图片在'xl/media/'这个路径下,有了这个目标后,我们再用for循环遍历zip文件里的所有文件,找到路径下的图片。

    第二个for循环需要注意几点

    azip.open()是zipfile模块里的打开命令。相对应的,就有azip.close()这个命令,这个命令再整个程序运行完后必须运训,因为不仅可以清理所占空间,而且如果你需要还原xlsx文件格式的话,你就必须得关闭,不然会报错。

    Image.open()是模块Pillow模块的读取图片函数,也算是我们本章最重要的函数之一了,与其搭配的是Image.save()函数,是用来存储的。中间插着一段代码img.convert("RGB"),这个一般都是要用到的,我们存储的图片大多数是有色的,也就是RGB图像,如果是黑白的话就要调一下参数。有兴趣的读者可以自行查阅文献。

    2.2  方法二

    接下来讲解第二种方法,先上代码

    from PIL import ImageGrab
    import win32com.client as win32
    
    excel = win32.gencache.EnsureDispatch('Excel.Application')
    workbook = excel.Workbooks.Open(r'D:\example.xlsx')
    
    num = 1
    for sheet in workbook.Worksheets:
        for i, shape in enumerate(sheet.Shapes):
            if shape.Name.startswith('Picture'):
                shape.Copy()
                image = ImageGrab.grabclipboard()   
                image.convert('RGB').save(r'D:\{}.jpg'.format(num), 'jpeg')
                num+=1
    excel.Quit()
    

    效果呈现:

    从上图可以看到,与方法一的效果相比,基本一致,除了没有进行压缩,下面简单说一下代码

    from PIL import ImageGrab
    import win32com.client as win32
    excel = win32.gencache.EnsureDispatch('Excel.Application')
    workbook = excel.Workbooks.Open(r'D:\example.xlsx')
    

    首先先引入方法二相关的模块,第三行代码是引入模块win32中对Excel中的运用程序。第四行和方法一一样是读取D盘根目录下的example.xlsx文件。

    num = 1
    for sheet in workbook.Worksheets:
        for i, shape in enumerate(sheet.Shapes):
            if shape.Name.startswith('Picture'):
                shape.Copy()
                image = ImageGrab.grabclipboard()   
                image.convert('RGB').save(r'D:\{}.jpg'.format(num), 'jpeg')
                num+=1
    excel.Quit()
    

    第一行num=1,是用来为下面存储图片的图片命名的

    接下来就是进行for嵌套for,第一个for循环的目的是遍历所选Excel文件中的工作表,我们有四张图片放在example.xlsx的四个不同的工作表里。第二个for循环是用来遍历每个工作表中的图片并复制到粘贴板中的。

    其中,enumerate()函数是用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。这里的意思就是存放每张图片数据信息的索引。i是数据下标,shape是数据

    shape.Name.startswith('Picture')是判断获到的shape里面名字信息中的开头是否符合'pitcure',如果是,则返回True。

    shape.Copy()函数是对一个一个字典的浅复制(拷贝)。简单来说就是只在程序中的复制。

    ImageGrab.grabclipboard()函数是方法二的精髓,这个函数是抓取当前剪贴板的快照,返回一个模式为“RGB”的图像或者文件名称的列表。如果剪贴板不包括图像数据,这个函数返回空。读者可以使用函数isinstance()来检查该函数返回的是一个有效图像对象或者其他数据。

    image.convert('RGB').save(r'D:\{}.jpg'.format(num), 'jpeg')这段语句,是将得到的image以jpg的格式存储。这里的jpeg其实就是jpg,只不过模块里以jpeg代替jpg。

    注意,这里必须用convert('RGB'),如果不使用.convert('RGB')进行转换的话,读出来的图像是RGBA四通道的,A通道为透明通道,运出来是没有图像显示的。因此使用convert('RGB')进行通道转换。

    至此,我们就讲完了使用Python提取Excel中图片的两种方法,大家可以根据自己的情况来选择如恶化提取Excel中的图片。

      二、Python写入Excel图片

    在讲完如何用Python提取Excel中图片之后,下面我们将讲解如何用Python将图片写入到Excel文件中。

    我们常用的模块是xlsxwriter。这里先介绍这个模块的常用插入图片函数

    worksheet.insert_image(row,col,image[,options] :在工作表单元格中插入一张图片

    参数介绍如下:

    row(int) - 单元格所在的行(从0开始)

    col(int) - 单元格所在的列(从0开始)

    image(string) - 图片文件名(含路径)

    options(dict) - 可选的图片位置,缩放,url参数

    同时insert_image()方法接受字典形式的可选参数来定位和缩放图片。默认值为

    {
        'x_offset': 0,    #以像素为单位,可以大于每个单元格的宽度和高度
        'y_offset': 0,
        'x_scale': 1,
        'y_scale': 1,
        'url': None,
        'tip': None,
        'image_data': None,
        'positioning': None,
    }

    上面几个参数主要作用如下:

    x_scale和y_scale参数可以用于水平及垂直的缩放图片。

    url参数可以为图片添加超链接/url, tip 参数为含有超链接的图片提供可选的鼠标悬停时的提示信息

    image_data参数用于在io.BytesIO中添加内存中的字节流,一般不用

    positioning参数可以用来控制图片对象的位置

    接下来会做一个简单的程序来演示:

    这里用一份数据简单的画出一个折线图,数据是一份广汇汽车的股票数据,从8月底到10月底的数据。以收盘价和时间画一个简单的折线图.

    代码如下:

    import pandas as pd
    import matplotlib.pyplot as plt
    import matplotlib.style as psl
    import xlsxwriter
    fig = plt.figure()
    df = pd.read_excel(r'D:\数据.xlsx')
    title = ['日期','收盘价']
    df = df[title]
    plt.plot(df['日期'],df['收盘价'])
    plt.gcf().autofmt_xdate()#自动调整角度
    plt.savefig(r'D:\数据折线图.jpg')
    

    Python画出的图如下:

    现在我们要将其插入到一份名为数据image.xlsx的excel文件中,来看看代码怎么写👇

    首先使用xlswriter创建一个新Excel文件并添加一个工作表

    
    workbook = xlsxwriter.Workbook(r'D:\数据images.xlsx')
    worksheet = workbook.add_worksheet()
    

    下面使用.insert_image插入图片。

    worksheet.write('A2', '插入第一张图片:')
    worksheet.insert_image('B2', r'D:\数据折线图.jpg')
    
    worksheet.write('A12', '插入第二张即位偏移图片:')
    worksheet.insert_image('B12', r'D:\数据折线图.jpg', {'x_offset': 15, 'y_offset': 10})
    
    
    # 插入一张缩放了的图片。
    worksheet.write('A23', '插入第三张缩放了的图片:')
    worksheet.insert_image('B23', r'D:\数据折线图.jpg', {'x_scale': 0.5, 'y_scale': 0.5})
    
    workbook.close()
    

    最后要注意一定要用workbook.close()才能生成,效果呈现如下

    可以看到,我们使用Matplotlib生成的折线图被插入到我们预定的指定位置中!

    至此,本文就结束了,相信你已经学会如何使用Python与Excel图片之间的交互,并能够结合具体的需求进行批量操作

    在这里还是要推荐下我自己建的Python开发学习群:1156465813,群里都是学Python开发的,如果你正在学习Python ,欢迎你加入,大家都是软件开发党,不定期分享干货(只有Python软件开发相关的),包括我自己整理的一份2020最新的Python进阶资料和高级开发教程,欢迎进阶中和进想深入Python的小伙伴!

    展开全文
  • 公众号后台回复“图书“,了解更多号主新书内容作者:刘早起来源:早起Python大家好,在使用Python进行办公自动化操作时,一定少不了与Excel表格的交互,我们通常是panda...


    公众号后台回复“图书“,了解更多号主新书内容

     作者:刘早起

     来源:早起Python

    大家好,在使用Python进行办公自动化操作时,一定少不了与Excel表格的交互,我们通常是用pandas处理表格数据,但大多数情况下,都是读取表格中的数值进行分析。

    那么你知道如何使用Python读取Excel中的图片?又如何使用Python直接往Excel中写入图片?甚至使用Python制作一个Excel可视化大屏?

    因为图片的存储格式与数字数据格式不一样,所以实现起来稍显复杂,本文就将对以下两个部分进行深入讲解:

    • Python读取Excel图片

    • Python写入Excel图片

    涉及的Python模块有以下几个

    • PIL

    • win32

    • os

    • zipfile

    • numpy

    • xlsxwriter

      一、准备

    由于此次包比较多,我们需要在命令行中使用pip进行安装

    pip install pillow   #这是对模块PTL的安装
    pip install pypiwin32    #这是对win32的安装
    pip install os 
    pip install zipfile
    pip install numpy
    pip install xlsxwriter
    

    在下载的过程中,有些包是比较大的,会出现超时time out的报错现象。这里介绍几个国内的镜像,大家可以尝试其中一个,速度会比单纯的pip快10倍不止。地址如下:

    http://pypi.douban.com/simple/ 豆瓣
    http://mirrors.aliyun.com/pypi/simple/ 阿里
    http://pypi.hustunique.com/simple/ 华中理工大学
    http://pypi.sdutlinux.org/simple/ 山东理工大学
    http://pypi.mirrors.ustc.edu.cn/simple/ 中国科学技术大学
    https://pypi.tuna.tsinghua.edu.cn/simple 清华
    

    代码如下:

    pip install 模块名 -i 网址
    

    清华镜像举例

    pip install pillow -i https://pypi.tuna.tsinghua.edu.cn/simple
    

    注意:如果是原生态的cmd窗口安装的,会提示加个--user命令,读者按照指示即可。

      二、Python读取Excel图片

    上面说过,Python读取Excel图片有两种方法

    第一种:将xlsx后缀名改为zip形式,即进行压缩。而后读取里面存储图片的文件,将里面的图片取出来。

    第二种:用提取到粘贴板中的方法将图片保存到JPGPNG等格式中

    两种方法各有缺点和优点,第一种方法缺点是代码量比较长,优点是万能,Excel的所有格式都可以运用。

    第二种的优点是代码量少,缺点是对于一些xlsx的文件运用不了

    首先我们先讲解第一种方法,之后在讲解第二种方法时,大家可以进行对比!

    讲解之前我们用的是以下的example.xlsx文件,里面有四个工作表,每个工作表都有一张数据可视化图。例如工作表3中的气泡图如下:

    2.1  方法一

    和之前的文章一样,我们先给出全部代码与效果图之后再进行讲解

    import os
    import zipfile
    import os
    from PIL import Image
    import numpy as np 
    path = r'D:'
    count = 1
    for file in os.listdir(path):
        new_file = file.replace(".xlsx",".zip")
        os.rename(os.path.join(path,file),os.path.join(path,new_file))
        count+=1
    print('总共有'+str(count)+'个文件夹')
    number = 0
    craterDir = "D:/"  # 存放zip文件的文件夹路径
    saveDir = "D:/"  # 存放图片的路径 
    list_dir = os.listdir(craterDir) 
    for i in range(len(list_dir)):
        if 'zip' not in list_dir[i]:
            list_dir[i] = ''
    while '' in list_dir:
        list_dir.remove('')    
    for zip_name in list_dir:
        print(zip_name)
        azip = zipfile.ZipFile(craterDir + zip_name)
        namelist = (azip.namelist())
     
        for idx in range(0,len(namelist)):
            if namelist[idx][:9] == 'xl/media/':#图片是在这个路径下
                img_name = saveDir + str(number)+'.jpg'
                f = azip.open(namelist[idx])
                img = Image.open(f)
                img = img.convert("RGB")
                img.save(img_name,"JPEG")
                number += 1
    azip.close()  #关闭文件,必须有,释放内存
    

    效果展现如下:

    可以看到example.xlsx里面的四张工作表里的图片都提取出来,保存在本地。

    现在我们进行代码解析,首先,引入相关包

    import os
    import zipfile
    from PIL import Image
    import numpy as np 
    

    其次,就是将xlsx格式结尾的文件夹进行压缩,转化成zip结尾的文件

    path = r'D:'   #excel文件位置
    count = 1
    for file in os.listdir(path):
        new_file = file.replace(".xlsx",".zip")
        os.rename(os.path.join(path,file),os.path.join(path,new_file))
        count+=1 
    

    这里首先设置了example.xlsx的文件位置,在D盘的根目录,读者需要做调整的话在path那行代码修改即可。

    其次用os模块的listdir函数用于返回指定的文件夹包含的文件或文件夹的名字的列表。再用for循环遍历这个列表,将.xlsx结尾的改为.zip结尾。

    同时再用os.rename()函数重命名对应的文件夹。count是用来告诉用户这个文件夹有多少个文件的,用于检验。

    最后,就是在这些压缩过后的文件中,提取图片。代码如下

    number = 0
    craterDir = "D:/"  # 存放zip文件的文件夹路径
    saveDir = "D:/"  # 存放图片的路径 
    list_dir = os.listdir(craterDir) # 获取所有的文件名
    
    for i in range(len(list_dir)):
        if 'zip' not in list_dir[i]:
            list_dir[i] = ''
    while '' in list_dir:
        list_dir.remove('')   
    

    下面是代码解析

    首先,number=0是用来最后命名图片的。craterDir是指存放zip的文件夹路径,saveDir指存放提取后的图片的指定路径。用os.listdir()函数来获取在这个路径下的所有文件名字。

    这里强调下,本章代码采用的路径,除了上面讲过的path外,其他都用绝对路径,因为如os模块和zipfile模块,这些模块用绝对路径更不会报错。

    下面用一个for循环加个while循环的用途是剔除不是.zip结尾的文件夹。这时有读者会问,用for循环加个列表del函数不香吗?

    其实是不行的,大家可以去尝试一下。原因是,你每次del广域网一个列表的元素,列表的数量值会一直在变而不是固定的,这样就会导致超出索引的错误。

    for zip_name in list_dir:
        print(zip_name)
        # 默认模式r,读
        azip = zipfile.ZipFile(craterDir + zip_name)
        # 返回所有文件夹和文件
        namelist = (azip.namelist())
     
        for idx in range(0,len(namelist)):
            if namelist[idx][:9] == 'xl/media/':#图片是在这个路径下
                img_name = saveDir + str(number)+'.jpg'
                f = azip.open(namelist[idx])
                img = Image.open(f)
                img = img.convert("RGB")
                img.save(img_name,"JPEG")
                number += 1
    azip.close()  #关闭文件,必须有,释放内存
    

    最后就是读取zip文件中的图片。用for循环遍历我们已经处理过的list——dir列表,得到zip文件名,再用zipfile.ZipFile()函数来打开我们zip文件。其中azip.namelist()函数是用来装zip文件里面所有文件的文件名列表。

    接下来可以进入到zip文件中仔细观察,可以发现我们所需要的图片在'xl/media/'这个路径下,有了这个目标后,我们再用for循环遍历zip文件里的所有文件,找到路径下的图片。

    第二个for循环需要注意几点

    azip.open()zipfile模块里的打开命令。相对应的,就有azip.close()这个命令,这个命令再整个程序运行完后必须运训,因为不仅可以清理所占空间,而且如果你需要还原xlsx文件格式的话,你就必须得关闭,不然会报错。

    Image.open()是模块Pillow模块的读取图片函数,也算是我们本章最重要的函数之一了,与其搭配的是Image.save()函数,是用来存储的。中间插着一段代码img.convert("RGB"),这个一般都是要用到的,我们存储的图片大多数是有色的,也就是RGB图像,如果是黑白的话就要调一下参数。有兴趣的读者可以自行查阅文献。

    2.2  方法二

    接下来讲解第二种方法,先上代码

    from PIL import ImageGrab
    import win32com.client as win32
    
    excel = win32.gencache.EnsureDispatch('Excel.Application')
    workbook = excel.Workbooks.Open(r'D:\example.xlsx')
    
    num = 1
    for sheet in workbook.Worksheets:
        for i, shape in enumerate(sheet.Shapes):
            if shape.Name.startswith('Picture'):
                shape.Copy()
                image = ImageGrab.grabclipboard()   
                image.convert('RGB').save(r'D:\{}.jpg'.format(num), 'jpeg')
                num+=1
    excel.Quit()
    

    效果呈现:

    从上图可以看到,与方法一的效果相比,基本一致,除了没有进行压缩,下面简单说一下代码

    from PIL import ImageGrab
    import win32com.client as win32
    excel = win32.gencache.EnsureDispatch('Excel.Application')
    workbook = excel.Workbooks.Open(r'D:\example.xlsx')
    

    首先先引入方法二相关的模块,第三行代码是引入模块win32中对Excel中的运用程序。第四行和方法一一样是读取D盘根目录下的example.xlsx文件。

    num = 1
    for sheet in workbook.Worksheets:
        for i, shape in enumerate(sheet.Shapes):
            if shape.Name.startswith('Picture'):
                shape.Copy()
                image = ImageGrab.grabclipboard()   
                image.convert('RGB').save(r'D:\{}.jpg'.format(num), 'jpeg')
                num+=1
    excel.Quit()
    

    第一行num=1,是用来为下面存储图片的图片命名的

    接下来就是进行for嵌套for,第一个for循环的目的是遍历所选Excel文件中的工作表,我们有四张图片放在example.xlsx的四个不同的工作表里。第二个for循环是用来遍历每个工作表中的图片并复制到粘贴板中的。

    其中,enumerate()函数是用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。这里的意思就是存放每张图片数据信息的索引。i是数据下标,shape是数据

    shape.Name.startswith('Picture')是判断获到的shape里面名字信息中的开头是否符合'pitcure',如果是,则返回True。

    shape.Copy()函数是对一个一个字典的浅复制(拷贝)。简单来说就是只在程序中的复制。

    ImageGrab.grabclipboard()函数是方法二的精髓,这个函数是抓取当前剪贴板的快照,返回一个模式为“RGB”的图像或者文件名称的列表。如果剪贴板不包括图像数据,这个函数返回空。读者可以使用函数isinstance()来检查该函数返回的是一个有效图像对象或者其他数据。

    image.convert('RGB').save(r'D:\{}.jpg'.format(num), 'jpeg')这段语句,是将得到的image以jpg的格式存储。这里的jpeg其实就是jpg,只不过模块里以jpeg代替jpg。

    注意,这里必须用convert('RGB'),如果不使用.convert('RGB')进行转换的话,读出来的图像是RGBA四通道的,A通道为透明通道,运出来是没有图像显示的。因此使用convert('RGB')进行通道转换。

    至此,我们就讲完了使用Python提取Excel中图片的两种方法,大家可以根据自己的情况来选择如恶化提取Excel中的图片。

      二、Python写入Excel图片

    在讲完如何用Python提取Excel中图片之后,下面我们将讲解如何用Python将图片写入到Excel文件中。

    我们常用的模块是xlsxwriter。这里先介绍这个模块的常用插入图片函数

    worksheet.insert_image(row,col,image[,options] :在工作表单元格中插入一张图片

    参数介绍如下:

    • row(int) - 单元格所在的行(从0开始)

    • col(int) - 单元格所在的列(从0开始)

    • image(string) - 图片文件名(含路径)

    • options(dict) - 可选的图片位置,缩放,url参数

    同时insert_image()方法接受字典形式的可选参数来定位和缩放图片。默认值为

    {
        'x_offset': 0,    #以像素为单位,可以大于每个单元格的宽度和高度
        'y_offset': 0,
        'x_scale': 1,
        'y_scale': 1,
        'url': None,
        'tip': None,
        'image_data': None,
        'positioning': None,
    }
    

    上面几个参数主要作用如下:

    • x_scaley_scale参数可以用于水平及垂直的缩放图片。

    • url参数可以为图片添加超链接/url, tip 参数为含有超链接的图片提供可选的鼠标悬停时的提示信息

    • image_data参数用于在io.BytesIO中添加内存中的字节流,一般不用

    • positioning参数可以用来控制图片对象的位置

    接下来会做一个简单的程序来演示:

    这里用一份数据简单的画出一个折线图,数据是一份广汇汽车的股票数据,从8月底到10月底的数据。以收盘价和时间画一个简单的折线图.

    代码如下:

    import pandas as pd
    import matplotlib.pyplot as plt
    import matplotlib.style as psl
    import xlsxwriter
    fig = plt.figure()
    df = pd.read_excel(r'D:\数据.xlsx')
    title = ['日期','收盘价']
    df = df[title]
    plt.plot(df['日期'],df['收盘价'])
    plt.gcf().autofmt_xdate()#自动调整角度
    plt.savefig(r'D:\数据折线图.jpg')
    

    Python画出的图如下:

    现在我们要将其插入到一份名为数据image.xlsx的excel文件中,来看看代码怎么写????

    首先使用xlswriter创建一个新Excel文件并添加一个工作表

    
    workbook = xlsxwriter.Workbook(r'D:\数据images.xlsx')
    worksheet = workbook.add_worksheet()
    

    下面使用.insert_image插入图片。

    worksheet.write('A2', '插入第一张图片:')
    worksheet.insert_image('B2', r'D:\数据折线图.jpg')
    
    worksheet.write('A12', '插入第二张即位偏移图片:')
    worksheet.insert_image('B12', r'D:\数据折线图.jpg', {'x_offset': 15, 'y_offset': 10})
    
    
    # 插入一张缩放了的图片。
    worksheet.write('A23', '插入第三张缩放了的图片:')
    worksheet.insert_image('B23', r'D:\数据折线图.jpg', {'x_scale': 0.5, 'y_scale': 0.5})
    
    workbook.close()
    

    最后要注意一定要用workbook.close()才能生成,效果呈现如下

    可以看到,我们使用Matplotlib生成的折线图被插入到我们预定的指定位置中!

    至此,本文就结束了,相信你已经学会如何使用Python与Excel图片之间的交互,并能够结合具体的需求进行批量操作

    ◆ ◆ ◆  ◆ ◆麟哥新书已经在京东上架了,我写了本书:《拿下Offer-数据分析师求职面试指南》,目前京东正在举行100-40活动,大家可以用相当于原价5折的预购价格购买,还是非常划算的:
    
    数据森麟公众号的交流群已经建立,许多小伙伴已经加入其中,感谢大家的支持。大家可以在群里交流关于数据分析&数据挖掘的相关内容,还没有加入的小伙伴可以扫描下方管理员二维码,进群前一定要关注公众号奥,关注后让管理员帮忙拉进群,期待大家的加入。
    管理员二维码:
    猜你喜欢
    ● 卧槽!原来爬取B站弹幕这么简单● 厉害了!麟哥新书登顶京东销量排行榜!● 笑死人不偿命的知乎沙雕问题排行榜
    ● 用Python扒出B站那些“惊为天人”的阿婆主!● 你相信逛B站也能学编程吗
    
    展开全文
  • 今天小编就为大家分享一篇Python读取Excel表格,并同时画折线图和柱状图的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 一、读取excel这里介绍一个不错的包xlrs,可以工作在任何平台。这也就意味着你可以在Linux下读取Excel文件。首先,打开workbook;复制代码 代码如下:import xlrdwb = xlrd.open_workbook('myworkbook.xls')检查表单...

    一、读取excel

    这里介绍一个不错的包xlrs,可以工作在任何平台。这也就意味着你可以在Linux下读取Excel文件。

    首先,打开workbook;

    复制代码 代码如下:

    import xlrd

    wb = xlrd.open_workbook('myworkbook.xls')

    检查表单名字:

    复制代码 代码如下:

    wb.sheet_names()

    得到第一张表单,两种方式:索引和名字

    复制代码 代码如下:

    sh = wb.sheet_by_index(0)

    sh = wb.sheet_by_name(u'Sheet1')

    递归打印出每行的信息:

    复制代码 代码如下:

    for rownum in range(sh.nrows):

    print sh.row_values(rownum)

    如果只想返回第一列数据:

    复制代码 代码如下:

    first_column = sh.col_values(0)

    [code]

    通过索引读取数据:

    [code]

    cell_A1 = sh.cell(0,0).value

    cell_C4 = sh.cell(rowx=3,colx=2).value

    注意:这里的索引都是从0开始的。

    二、写excel

    这里介绍一个不错的包xlwt,可以工作在任何平台。这也就意味着你可以在Linux下保存Excel文件。

    基本部分

    在写入Excel表格之前,你必须初始化workbook对象,然后添加一个workbook对象。比如:

    复制代码 代码如下:

    import xlwt

    wbk = xlwt.Workbook()

    sheet = wbk.add_sheet('sheet 1')

    这样表单就被创建了,写入数据也很简单:

    复制代码 代码如下:

    # indexing is zero based, row then column

    sheet.write(0,1,'test text')

    之后,就可以保存文件(这里不需要想打开文件一样需要close文件):

    复制代码 代码如下:

    wbk.save('test.xls')

    深入探索

    worksheet对象,当你更改表单内容的时候,会有警告提示。

    复制代码 代码如下:

    sheet.write(0,0,'test')

    sheet.write(0,0,'oops')

    # returns error:

    # Exception: Attempt to overwrite cell:

    # sheetname=u'sheet 1' rowx=0 colx=0

    解决方式:使用cell_overwrite_ok=True来创建worksheet:

    复制代码 代码如下:

    sheet2 = wbk.add_sheet('sheet 2', cell_overwrite_ok=True)

    sheet2.write(0,0,'some text')

    sheet2.write(0,0,'this should overwrite')

    这样你就可以更改表单2的内容了。

    更多:

    复制代码 代码如下:

    # Initialize a style

    style = xlwt.XFStyle()

    # Create a font to use with the style

    font = xlwt.Font()

    font.name = 'Times New Roman'

    font.bold = True

    # Set the style's font to this new one you set up

    style.font = font

    # Use the style when writing

    sheet.write(0, 0, 'some bold Times text', style)

    xlwt 允许你每个格子或者整行地设置格式。还可以允许你添加链接以及公式。其实你可以阅读源代码,那里有很多例子:

    dates.py, 展示如何设置不同的数据格式

    hyperlinks.py, 展示如何创建超链接 (hint: you need to use a formula)

    merged.py, 展示如何合并格子

    row_styles.py, 展示如何应用Style到整行格子中.

    三、修改excel

    Python中一般使用xlrd(excel read)来读取Excel文件,使用xlwt(excel write)来生成Excel文件(可以控制Excel中单元格的格式),需要注意的是,用xlrd读 取excel是不能对其进行操作的:xlrd.open_workbook()方法返回xlrd.Book类型,是只读的,不能对其进行操作。而 xlwt.Workbook()返回的xlwt.Workbook类型的save(filepath)方法可以保存excel文件。

    因此对于读取和生成Excel文件都非常容易处理,但是对于已经存在的Excel文件进行修改就比较麻烦了。不过,还有一个xlutils(依赖于xlrd和xlwt)提供复制excel文件内容和修改文件的功能。其实际也只是在xlrd.Book和xlwt.Workbook之间建立了一个管道而已,如下图:

    xlutils.copy模块的copy()方法实现了这个功能,示例代码如下:

    复制代码 代码如下:

    from xlrd import open_workbook

    from xlutils.copy import copy

    rb = open_workbook('m:\1.xls')

    #通过sheet_by_index()获取的sheet没有write()方法

    复制代码 代码如下:

    rs = rb.sheet_by_index(0)

    wb = copy(rb)

    #通过get_sheet()获取的sheet有write()方法

    ws = wb.get_sheet(0)

    ws.write(0, 0, 'changed!')

    wb.save('m:\1.xls')

    四、参考

    http://pypi.python.org/pypi/xlrd

    http://pypi.python.org/pypi/xlwt

    http://pypi.python.org/pypi/xlutils

    展开全文
  • 利用python读取Excel文件内容

    千次阅读 2020-05-14 09:48:55
    今天,跟大家谈一下python计算Excel中的数据 我们先学习读取Excel中的数据 首先我们要安装xlrd库,在命令...1、利用python读取Excel内容 xrld库中的open_workbook函数可以打开Excel文件,并且返回一个代表打开Excel
  • 一文看懂用Python读取Excel数据

    千次阅读 2019-11-03 21:15:00
    Python处理Excel文件主要是第三方模块库xlrd、xlwt、pyexcel-xls、xluntils和pyExcel-erator等,此外Pandas中也带有可以读取Excel文件的模块(read_excel)。 基于扩展知识的目的,本文使用xlr...
  • 利用python进行数据预处理,主要应用于学术研究中少量数据的处理。包括读取excel中的数据,将字符型的分类属性整数表示
  • 有的时候我们把数据整理收集整理到excel中,那么要把excel中的某列文本数据制作词云图怎么做呢? 从最简单的说起。 最简单的词云图就是这种,英文的,不读取文件,不指定背景形状图片,不指定字体。 #复制文本字符...
  • 主要给大家介绍了关于Python读取Excel一列并计算所有对象出现次数的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 点击上方“Python爬虫与数据挖掘”,进行关注回复“书籍”即可获赠Python从入门到进阶共10本电子书今日鸡汤世间无限丹青手,一片伤心画不成。python处理数据文件的途径有很多种,...
  • python读取excel

    2018-04-08 16:20:38
    python读取excel,能够读取简单的excel文件,将其转换为txt
  • 主要为大家详细介绍了python操作EXCEL读数据、写数据的实例源码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • python基础什么是模块、包、库1111111111 什么是模块、包、库 1111111111
  • python读取Excel

    2018-04-17 16:43:42
    利用python的xlrd读取Excel,正确读取合并的单元格数据,并打印所有单元格的数据
  • 包含excel的读和写方法,写入数据做了详细判断,读取方式有多种,可传整列或整行或整表或具体某单元格

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 50,092
精华内容 20,036
关键字:

如何用python读取excel

python 订阅