python图片对比计数 python图片对比模块_hutool实现图片写入excel


码不理课堂开课啦!

Python 的一大应用场景,而 Excel 则是最流行的数据处理软件。因此用 Python 进行数据相关的工作时,难免要和 Excel 打交道。如果仅仅是要以表单形式保存数据,可以借助CSV 格式(一种以逗号分隔的表格数据格式)进行处理,Excel 也支持此格式。但标准的 Excel文件(xls/xlsx)具有较复杂的格式,并不方便像普通文本文件一样直接进行读写,需要借助第三方库来实现。


python图片对比计数 python图片对比模块_python_02


python图片对比计数 python图片对比模块_hutool实现图片写入excel_03


xlrd、xlwt、xlutils xlrd- 读取 Excel 文件 xlwt- 写入 Excel 文件 xlutils- 操作 Excel 文件的实用工具,如复制、分割、筛选等
尽管这是目前被用得最多的 Excel 库,我还是很想吐槽为什么这三个包不能放在一个模块里……另外它们有个缺陷,就是只能处理 xls 文件。如果你想用新版本的 xlsx,可以考虑 openpyxlxlsxwriter
不过今天只说说这三个


python图片对比计数 python图片对比模块_数据_04


Part.1 安装

《我该如何,安装python的第三方模块》
如果安装过之前推荐的 anaconda,那么就已经有了 xlrd 和 xlwt,但xlutils 没有附带在安装包中,使用时仍需另行安装。

Part.2 读取

结合一段简单的代码来看:

import xlrd
# 打开 xls 文件
book = xlrd.open_workbook("test.xls")
print "表单数量:", book.nsheets
print "表单名称:", book.sheet_names()
# 获取第1个表单
sh = book.sheet_by_index(0)
print u"表单 %s 共 %d 行 %d 列" % (sh.name, sh.nrows,sh.ncols)
print "第二行第三列:", sh.cell_value(1, 2)
# 遍历所有表单
for s in book.sheets():
 for r in range(s.nrows):
 # 输出指定行
 print s.row(r)

测试文件:


python图片对比计数 python图片对比模块_python图片对比计数_05


输出结果:表单数量: 2
表单名称: [u'Group.A', u'Group.B']
表单 Group.A 共 7 行 3 列
第二行第三列: 15.0

[text:u'Rank', text:u'Team', text:u'Points']
[number:1.0, text:u'Brazil', number:15.0]
[number:2.0, text:u'Russia', number:12.0]


...
常用的方法:*open_workbook 打开文件*sheet_by_index 获取某一个表单*sheets 获取所有表单*cell_value 获取指定单元格的数据

Part.3 写入

还是看代码:

import xlwt
# 创建 xls 文件对象
wb = xlwt.Workbook()
# 新增一个表单
sh = wb.add_sheet('A Test Sheet')
# 按位置添加数据
sh.write(0, 0, 1234.56)
sh.write(1, 0, 8888)
sh.write(2, 0, 'hello')
sh.write(2, 1, 'world')
# 保存文件
wb.save('example.xls')

生成文件:


python图片对比计数 python图片对比模块_python_06


常用的方法:*Workbook 创建文件对象*add_sheet 新增一个表单*write 在指定单元格写入数据

Part.4 修改

很遗憾,并没有直接修改 xls 文件的方法。通常的做法是,读取出文件,复制一份数据,对其进行修改,再保存。
在复制时,需要用到 xlutils 中的方法:

from xlrd import open_workbook
from xlutils.copy import copy
# 打开文件
rb = open_workbook("example.xls")
# 复制
wb = copy(rb)
# 选取表单
s = wb.get_sheet(0)
# 写入数据
s.write(0, 1, 'new data')
# 保存
wb.save('example.xls')

修改后文件:


python图片对比计数 python图片对比模块_数据_07


特别要注意的是:选取读取表单时,要使用 sheet_by_index,而在选取写入表单时,则要用 get_sheet。不要问我为什么,我也很想知道这么设定的用意何在……Part.5时间转换
如果表单中有时间格式的数据,通过处理之后,你会发现时间数据出了差错


python图片对比计数 python图片对比模块_数据_08


python图片对比计数 python图片对比模块_表单_09


输出单元格内容:[number:8888.0, xldate:42613.0]因为这里 xldate 有自己的格式定义。如果要使用正确的格式,必须转换:
new_date = xlrd.xldate.xldate_as_datetime(date,book.datemode)date 是对应单元格的数据,book 是打开的文件对象。
另外,在打开文件时,加上参数 formatting_info=True,可以保证在时间数据在 copy 时保持原样。写入时间数据,则可通过此方法创建 excel 的时间对象:xlrd.xldate.xldate_from_datetime_tuple或者通过 xlwt.easyxf 指定时间格式:
style = xlwt.easyxf(num_format_str='D-MMM-YY')
ws.write(1, 0, datetime.now(), style)

课堂拓展(资源篇)

处理excel的大量python包

网页上爬下来的大量数据需要清洗?成堆的科学实验数据需要导入excel进行分析?作为人生苦短的 Python 程序员,该如何优雅地操作 Excel?
得益于前人的辛勤劳作,Python 处理 Excel 已有很多现成的轮子,使用较多的有:xlwings:简单强大,可替代VBAopenpyxl:简单易用,功能广泛pandas:使用需要结合其他库,数据处理是pandas立身之本win32com:不仅仅是excel,可以处理office;Xlsxwriter:丰富多样的特性,直接创造一份美观大方的excel,代码即一切;DataNitro:作为插件内嵌到excel中,可替代VBA,在excel中优雅的使用pythonxlutils:结合xlrd/xlwt,老牌python包,需要注意的是你必须同时安装这三个库


python图片对比计数 python图片对比模块_python_02


课堂拓展(模块对比)

各种模块比较
从运行环境、文档操作、基本功能和性能等方面对以上模块进行一次粗浅的比较1. 环境配置
再好的模块,也需要在正确的 Python 版本以及 Excel 版本才可运行。


python图片对比计数 python图片对比模块_数据_11


提醒及注意:
xlutils 仅支持 xls 文件,即2003以下版本;
win32com 与 DataNitro 仅支持 windows 系统;
xlwings 安装成功后,如果运行提示报错“ImportError: no module namedwin32api”,请再安装 pypiwin32 或者 pywin32 包;
win32com 不是独立的扩展库,而是集成在其他库中,安装 pypiwin32 或者pywin32 包即可使用;
DataNitro 是 Excel 的插件,安装需到官网下载。2. 文档操作
虽然大家都是操作 Excel,但即使最基本的新建文件、修改文件、保存文件等功能,在不同的库中也存在差异。比如 xlsxwriter 并不支持打开或修改现有文件,xlwings 不支持对新建文件的命名,DataNitro 作为 Excel 插件需依托于软件本身,pandas 新建文档需要依赖其他库等等。


python图片对比计数 python图片对比模块_数据_12


3. 基本功能
由于设计目的不同,每个模块通常着重于某一方面功能,各有所长。xlwings
可结合 VBA 实现对 Excel 编程,强大的数据输入分析能力,同时拥有丰富的接口,结合 pandas/numpy/matplotlib 轻松应对 Excel 数据处理工作。openpyxl
简单易用,功能广泛,单元格格式/图片/表格/公式/筛选/批注/文件保护等等功能应有尽有,图表功能是其一大亮点,缺点是对 VBA 支持的不够好。pandas
数据处理是 pandas 的立身之本,Excel 作为 pandas 输入/输出数据的容器。win32com
从命名上就可以看出,这是一个处理 windows 应用的扩展,Excel 只是该库能实现的一小部分功能。该库还支持 office 的众多操作。需要注意的是,该库不单独存在,可通过安装 pypiwin32 或者 pywin32 获取。xlsxwriter
拥有丰富的特性,支持图片/表格/图表/筛选/格式/公式等,功能与openpyxl相似,优点是相比 openpyxl 还支持 VBA 文件导入,迷你图等功能,缺点是不能打开/修改已有文件,意味着使用 xlsxwriter 需要从零开始。DataNitro
作为插件内嵌到 Excel 中,可完全替代 VBA,在 Excel 中使用 python 脚本。既然被称为 Excel 中的 python,协同其他 python 库亦是小事一桩。然而,这是付费插件...xlutils
基于 xlrd/xlwt,老牌 python 包,算是该领域的先驱,功能特点中规中矩,比较大的缺点是仅支持 xls 文件。4.性能
我们对几个库做了最基本的写入和读取测试,分别使用不同库进行添加及读取1000行 * 700列 数据操作,得到所用时间,重复操作取平均值。另外在不同的电脑配置,不同的环境下结果肯定会有出入,数据仅供参考。


python图片对比计数 python图片对比模块_python_13


注:xlutils 最多只能写入 256 列,即 1000*256,用时3.8秒,表现不错;DataNitro 与 xlsxwriter 不能打开 Excel 文件。5. 小结
通过以上的分析,相信大家对几个库都有了简单的了解。在编写文章的过程中,笔者也在思考各个库最适合的应用场景。
不想使用GUI 而又希望赋予Excel 更多的功能,openpyxl 与xlsxwriter,你可二者选其一;
需要进行科学计算,处理大量数据,建议pandas+xlsxwriter或pandas+openpyxl;
想要写 Excel 脚本,会 Python 但不会 VBA 的同学,可考虑 xlwings 或DataNitro;
至于 win32com,不管是功能还是性能都很强大,有 windows 编程经验的同学可以使用。不过它相当于是 windows COM 的封装,自身并没有很完善的文档,新手使用起来略有些痛苦。
你可根据自己的需求和生产环境,选择合适的 Python-Excel 模块。


python图片对比计数 python图片对比模块_python_02


课 堂 拓 展 ( 对 比 篇)

通过选中单元格并查看开始菜单中的数值类型来判断数据的格式。

python与excel的功能对比1.生成数据表EXCEL:生成数据表,常见的生成方法有两种,第一种是导入外部数据,第二种是直接写入数据。 Excel中的文件菜单中提供了获取外部数据的功能,支持数据库和文本文件和页面的多种数据源导入。


python图片对比计数 python图片对比模块_python图片对比计数_15


python:支持从多种类型的数据导入。在开始使用python进行数据导入前需要先导入pandas库,为了方便起见,我们也同时导入numpy库。


python图片对比计数 python图片对比模块_python图片对比计数_16


2.查看数据格式Excel:通过选中单元格并查看开始菜单中的数值类型来判断数据的格式。


python图片对比计数 python图片对比模块_表单_17


Python:中使用dtypes函数来返回数据格式。


python图片对比计数 python图片对比模块_数据_18


3.处理空值(删除或填充)
我们在创建数据表的时候在price字段中故意设置了几个NA值。对于空值的处理方式有很多种,可以直接删除包含空值的数据,也可以对空值进行填充,比如用0填充或者用均值填充。还可以根据不同字段的逻辑对空值进行推算。Excel:中可以通过“查找和替换”功能对空值进行处理,将空值统一替换为0或均值。也可以通过“定位”空值来实现。


python图片对比计数 python图片对比模块_python图片对比计数_19


Python:中处理空值的方法比较灵活,可以使用 Dropna函数用来删除数据表中包含空值的数据,也可以使用fillna函数对空值进行填充。下面的代码和结果中可以看到使用dropna函数后,包含NA值的两个字段已经不见了。返回的是一个不包含空值的数据表。


python图片对比计数 python图片对比模块_表单_20


4.更改数据格式Excel:中通过“设置单元格格式”功能可以修改数据格式。Python中通过astype函数用来修改数据格式。


python图片对比计数 python图片对比模块_hutool实现图片写入excel_21


Python:中dtype是查看数据格式的函数,与之对应的是astype函数,用来更改数据格式。下面的代码中将price字段的值修改为int格式。


python图片对比计数 python图片对比模块_python图片对比计数_22


python图片对比计数 python图片对比模块_python_02


课堂拓展(代码示例)

6.1 xlwings基本代码

import xlwings as xw
#连接到excel
workbook = xw.Book(r'path/myexcel.xlsx')#连接excel文件
#连接到指定单元格
data_range = workbook.sheets('Sheet1').range('A1')
#写入数据
data_range.value = [1,2,3]
#保存
workbook.save()

6.2 xlsxwriter基本代码

import xlsxwriter as xw
#新建excel
workbook = xw.Workbook('myexcel.xlsx')
#新建工作薄
worksheet = workbook.add_worksheet()
#写入数据
worksheet.wirte('A1',1)
#关闭保存
workbook.close()

6.3 xlutils基本代码

import xlrd #读取数据
import xlwt #写入数据
import xlutils #操作excel
#----xlrd库
#打开excel文件
workbook = xlrd.open_workbook('myexcel.xls')
#获取表单
worksheet = workbook.sheet_by_index(0)
#读取数据
data = worksheet.cell_value(0,0)
#----xlwt库
#新建excel
wb = xlwt.Workbook()
#添加工作薄
sh = wb.add_sheet('Sheet1')
#写入数据
sh.write(0,0,'data')
#保存文件
wb.save('myexcel.xls')
#----xlutils库
#打开excel文件
book = xlrd.open_workbook('myexcel.xls')
#复制一份
new_book = xlutils.copy(book)
#拿到工作薄
worksheet = new_book.getsheet(0)
#写入数据
worksheet.write(0,0,'new data')
#保存
new_book.save()

6.4 win32com基本代码

import win32com.client as wc
#启动Excel应用
excel_app = wc.Dispatch('Excel.Application')
#连接excel
workbook = excel_app.Workbooks.Open(r'e:/myexcel.xlsx' )
#写入数据
workbook.Worksheets('Sheet1').Cells(1,1).Value = 'data'
#关闭并保存
workbook.SaveAs('newexcel.xlsx')
excel_app.Application.Quit()

6.5 openpyxl基本代码

import openpyxl
# 新建文件
workbook = openpyxl.Workbook() 
# 写入文件
sheet = workbook.activesheet['A1']='data'
# 保存文件 
workbook.save('test.xlsx')

6.6 DataNitro基本代码

#单一单元格赋值
Cell('A1').value = 'data'
#单元区域赋值
CellRange('A1:B2').value = 'data'


python图片对比计数 python图片对比模块_python_02


课堂总结以上便是 Python 和 Excel 文件的一些基本方法和基础知识。实际使用过程中遇到问题或者需要了解更多功能,永远记住两个词:RTFM、STFW:)


python图片对比计数 python图片对比模块_hutool实现图片写入excel_03


参考资料:http://www.python-excel.org/https://github.com/python-excelhttps://github.com/python-excel/tutorial/raw/master/python-excel.pdfhttp://bluewhale.cc/2017-04-21/use-python-for-data-analysis-like-excel-1.htmlhttps://zhuanlan.zhihu.com/p/22261597https://zhuanlan.zhihu.com/p/23998083