欢迎来到天天文库
浏览记录
ID:61931754
大小:28.50 KB
页数:11页
时间:2021-03-31
《(整理)python操作excel.教学提纲.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、__________________________________________________Youarehere:»»»Python操作Excel老婆单位有时候有一些很大的Excel统计报表需要处理,其中最恶心的是跨表的JOIN查询。他们通常采取的做法是,把多个Excel工作簿合成一个工作簿的多个表格,然后再跑函数(VLOOKUP之类)去查。因为用的函数效率很低,在CPU打满的情况下还要跑几个小时。然后我就看不过去了,我也不懂Excel,不知道如何优化,但我想用Python+SQLite总归
2、是能够实现的。于是就尝试了一把,效果还不错,一分钟以内完成统计很轻松,其中大部分时间主要花在读Excel内容上。1.Python操作Excel的函数库我主要尝试了3种读写Excel的方法:1>:这三个库的好处是不需要其它支持,在任何操作系统上都可以使用。xlrd可以读取.xls,.xlsx文件,非常好用;但因为xlwt不能直接修改Excel文档,必须得复制一份然后另存为其它文件,而且据说写复杂格式的Excel文件会出现问题,所以我没有选它来写Excel文件。_____________________
3、_______________________________________________________________________________2>:这个库也是不需要其它支持的,而且据说对Office2007格式支持得更好。遗憾地是,我经过测试,发现它加载Excel文件的效率比xlrd慢3倍以上,内存使用在10倍以上,于是就放弃了。3>:PythonWin32扩展,这个库需要运行环境为Windows+Office对应版本。由于PythonWin32扩展只是把COM接口包装了一下,可以视
4、为与VBA完全相同,不会有读写格式上的问题。尝试了一下用win32com读取Excel文件,效率还是比xlrd慢一些。由于读取效率上xlrd>win32com>openpyxl,所以我自然选择了xlrd用来读取统计报表;而最终输出的报表格式较复杂,所以选择了win32com直接操作Excel文件。2.Python里的关系型数据库是一个非常轻量级的关系型数据库,很多语言和平台都内置SQLite支持,也是iOS和Android上的默认数据库。Python的标准库里也包含了库,用起来非常方便。3.用xlr
5、d读取Excel并插入数据库样例____________________________________________________________________________________________________如果数据量不大,直接用Python内部数据结构如dict,list就够了。但如果读取的几张表数据量都较大,增加个将数据插入数据库的预处理过程就有很大好处。一是避免每次调试都要进行耗时较长的Excel文件载入过程;二是能充分利用数据库的索引和SQL语句强大功能进行快速数据分
6、析。#!/usr/bin/python #-*-coding:gbk-*-importxlrd importsqlite3#打开数据库文件 device_city_db=sqlite3.connect('device_city.db') cursor=device_city_db.cursor()#建表 cursor.execute('DROPTABLEIFEXISTSdevice_city') cursor.execute('CREATETABLEdevice_city(device_idchar
7、(16)PRIMARYKEY,cityvarchar(16))'____________________________________________________________________________________________________) #打开device相关输入Excel文件 device_workbook=xlrd.open_workbook('输入.xlsx') device_sheet=device_workbook.sheet_by_name('设备表')
8、#逐行读取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: continue city=device_sheet.cell(row,10).val
此文档下载收益归作者所有