《ython操作excel》word版

《ython操作excel》word版

ID:22690187

大小:51.50 KB

页数:6页

时间:2018-10-30

《ython操作excel》word版_第1页
《ython操作excel》word版_第2页
《ython操作excel》word版_第3页
《ython操作excel》word版_第4页
《ython操作excel》word版_第5页
资源描述:

《《ython操作excel》word版》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、Youarehere:Home»计算机»编程»Python操作ExcelPython操作Excel2012-09-01老婆单位有时候有一些很大的Excel统计报表需要处理,其中最恶心的是跨表的JOIN查询。他们通常采取的做法是,把多个Excel工作簿合成一个工作簿的多个表格,然后再跑函数(VLOOKUP之类)去查。因为用的函数效率很低,在CPU打满的情况下还要跑几个小时。然后我就看不过去了,我也不懂Excel,不知道如何优化,但我想用Python+SQLite总归是能够实现的。于是就尝试了一把,效果还不错,一分钟以内完成统计很轻松,其中大部分时间主要花

2、在读Excel内容上。1.Python操作Excel的函数库我主要尝试了3种读写Excel的方法:1>xlrd,xlwt,xlutils:这三个库的好处是不需要其它支持,在任何操作系统上都可以使用。xlrd可以读取.xls,.xlsx文件,非常好用;但因为xlwt不能直接修改Excel文档,必须得复制一份然后另存为其它文件,而且据说写复杂格式的Excel文件会出现问题,所以我没有选它来写Excel文件。2>openpyxl:这个库也是不需要其它支持的,而且据说对Office2007格式支持得更好。遗憾地是,我经过测试,发现它加载Excel文件的效率比x

3、lrd慢3倍以上,内存使用在10倍以上,于是就放弃了。3>win32com:PythonWin32扩展,这个库需要运行环境为Windows+Office对应版本。由于PythonWin32扩展只是把COM接口包装了一下,可以视为与VBA完全相同,不会有读写格式上的问题。尝试了一下用win32com读取Excel文件,效率还是比xlrd慢一些。由于读取效率上xlrd>win32com>openpyxl,所以我自然选择了xlrd用来读取统计报表;而最终输出的报表格式较复杂,所以选择了win32com直接操作Excel文件。2.Python里的关系型数据库S

4、QLite是一个非常轻量级的关系型数据库,很多语言和平台都内置SQLite支持,也是iOS和Android上的默认数据库。Python的标准库里也包含了sqlite3库,用起来非常方便。3.用xlrd读取Excel并插入数据库样例如果数据量不大,直接用Python内部数据结构如dict,list就够了。但如果读取的几张表数据量都较大,增加个将数据插入数据库的预处理过程就有很大好处。一是避免每次调试都要进行耗时较长的Excel文件载入过程;二是能充分利用数据库的索引和SQL语句强大功能进行快速数据分析。#!/usr/bin/python#-*-codin

5、g:gbk-*-importxlrdimportsqlite3#打开数据库文件device_city_db=sqlite3.connect('device_city.db')cursor=device_city_db.cursor()#建表cursor.execute('DROPTABLEIFEXISTSdevice_city')cursor.execute('CREATETABLEdevice_city(device_idchar(16)PRIMARYKEY,cityvarchar(16))') #打开device相关输入Excel文件device_

6、workbook=xlrd.open_workbook('输入.xlsx')device_sheet=device_workbook.sheet_by_name('设备表')#逐行读取device-城市映射文件,并将指定的列插入数据库forrowinrange(1,device_sheet.nrows):  device_id=device_sheet.cell(row,6).value  iflen(device_id)>16:    device_id=device_id[0:16]  iflen(device_id)==0:    continu

7、e  city=device_sheet.cell(row,10).value  #避免插入重复记录  cursor.execute('SELECT*FROMdevice_cityWHEREdevice_id=?',(device_id,))  res=cursor.fetchone()  ifres==None:    cursor.execute('INSERTINTOdevice_city(device_id,city)VALUES(?,?)',           (device_id,city))  else:    ifres[1]!=ci

8、ty:      print'%s,%s,%s,%s'%(device_id,city,res

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。