python 对 Excel 的文件操作
来源:互联网 发布:windows 没有远程桌面 编辑:程序博客网 时间:2024/05/29 19:09
Python操作Excel读写文件
Python操作excel和csv或者txt不同的是,读写需要的不是同一个包,xlrd和xlwt,其作用一目了然。
今天只探究一下写操作好了,也就是xlwt包的应用。
干脆都写 .^_^.
- 这是个方便,但是偶尔很鸡肋的包,那就是Excel的index上限-65536
- 至于为什么,接下来会详述,直接上代码
下载
不论是2.x还是3.x版本的python都可以直接pip到这两个包.
xlrd 读文件
import xlrddef open_excel(file= 'myfile.xls'): try: data = xlrd.open_workbook(file) return data except Exception,e: print str(e)
这是比较规范的写法,但是一般来讲,我会选择简洁一点的语句:
'''已有这个myfile文件'''rexcl = xlrd.open_workbook('myfile'.xls")worksheet = rexcl.sheet_by_name(u'Sheetname')
获取文件内所有表的表名
sheetsname = rexl.sheet_name()
定位到sheet的方法有三种
'''通过sheet_namel'''worksheet1 = workbook.sheet_by_name(u'Sheet1')'''通过序列顺序'''worksheet2 = workbook.sheets()[1]'''通过sheet_index'''worksheet1 = workbook.sheet_by_index(0)
遍历
'''遍历sheet1中所有行row'''num_rows = worksheet.nrowsfor cur_row in range(num_rows): row_value = worksheet.row_values(cur_row) print('row%s is %s' %(cur_row,row_value))'''遍历sheet1中所有列col'''num_cols = worksheet.ncolsfor cur_col in range(num_cols): col_value = worksheet.col_values(cur_col) print('col%s is %s' %(cur_col,col_value))'''遍历sheet1中所有单元格cell'''for rown in range(num_rows): for coln in range(num_cols): cell = worksheet.cell_value(rown,coln) print cell
获取单个页面的行列数
nrows = worksheet.nrows()ncols = worksheet.ncols()
xlwt 写文件
接下来来看一看写文件,有了读文件的基础,写文件就很简单了
创建workbook和sheet对象
Import xlwtbook = xlwt.Workbook(encoding="utf-8", style_compression=0)'''创建一个Wordbook对象,相当于创建了一个Excel文件'''sheet = workbook.add_sheet('worksheet',cell_overwrite_ok=True)'''创建一个sheet对象,一个sheet对象对应Excel文件中的一张表格''''''写入的过程很简单'''worksheet.write(0,0,'this should overwrite1')#write(cur_row,cur_col,value)参数比对
实例代码
内附详解
#-- 数据整理,对缺失数据进行匹配--##!/usr/bin/env# -*- coding: utf-8 -*-# @Date : 2017/9/2# @Version : python_3.7"""kaipiao count = 191228 (include index -1)carmodel: 4829cartype: 6qdxs: 31enginetype: 1783mali: 211displacement: 50"""import xlwtimport xlrddef kaipiaoProcess(): bookgengzheng = xlrd.open_workbook('D:\童享\pycharmproject\kaipiao\gengzheng.xlsx') book = xlrd.open_workbook('D:\童享\pycharmproject\kaipiao\kaipiao.xlsx') '''以要求的格式将系统文件写入系统数据表中''' booknew = xlwt.Workbook(encoding="utf-8", style_compression=0) kaipiaoname = ['kaipiao1', 'kaipiao2', 'kaipiao3', 'kaipiao4', 'kaipiao5'] '''要打开多个sheet的原因是在操作Excel写数据时,每一个sheet index上限是65536 对!这里就是超级鸡肋的地方!1页数据只能写这么多!''' carmodel = bookgengzheng.sheet_by_name('carmodel') dataCarModel = [] #针对每一条数据空缺的项目进行匹配 for cur_row in range(carmodel.nrows): cur_value = carmodel.row_values(cur_row) dataCarModel.append(cur_value) '''省略掉不少读取sheet内容的code''' flag = 0 #这里的flag用来控制我的新sheet生成 table = book.sheet_by_name('Sheet1') nrow = table.nrows for cur_row in range(0, nrow): row_value = table.row_values(cur_row) for i in range(len(dataCarModel)): if (row_value[6] == dataCarModel[i][0]): row_value[7] = dataCarModel[i][1] '''中间省去的都是匹配数据的代码''' #对当前的读取行数进行判断,一但到临界值(60000)就 add_sheet,名字不换,但是write的权限给了新的sheet。 if ( cur_row%60000 == 0 ): tablenew = booknew.add_sheet(kaipiaoname[flag], cell_overwrite_ok=True) flag = flag + 1 #行内按列写入数据 for i in range(len(row_value)): tablenew.write(cur_row%60000, i, row_value[i]) booknew.save("kaipiaonew.xlsx")if __name__ == '__main__': kaipiaoProcess()
这次的code是以实例处理为目标写的,但是为什么选择这个,主要原因是想要成这个机会把一个无奈之下逼出来的代码段po一下,看网上也没找到合适的,解决写入数据上限的方法。
单纯的修改save()中的文件后缀名,并不能解决问题
曾经尝试xlutils.copy,将原本的读入数据进行copy,尝试越过xls的这个障碍,因为xlsx的数据上限大约是150000,所以打算获取一下这个便利,但是尝试的结果还是一样,上限依旧存在。
网上没有任何解决方案,所以考虑,是不是可以连建多表,尝试以后发现可行,特此作为一个解决方案吧。
顺带加一个xlutils.copy的使用,还是一样的,pip轻松地就能获取到。
lutils.copy 这是一个神奇的包,可以copy另一个工作薄,用法如下:
book = xlutils.copy.copy(‘anotherBookName’)
当原本为读的文件需要更改为可写文件时,可以不用重新import xlwr,而是使用get_sheet()或者sheet_by_name()函数来获取原本没有的write权限。
wb = book.get_sheet(0)
阅读全文
0 0
- python对excel文件的读写操作
- python 对 Excel 的文件操作
- Python对EXCEL的操作
- python对excel的操作
- python对excel文件的操作学习笔记
- python对excel文件进行操作
- python对excel操作
- python 对excel操作
- Python对Excel的操作 pyExcelerator
- python 对EXCEL的读写操作
- python中对excel的操作
- Python学习笔记(2)Python对excel文件的操作
- python对文件的操作
- python 对文件的操作
- python对文件的操作
- python对文件的操作
- Python对文件的操作
- python对文件的操作
- Vue父子组件创建
- js赋值html
- cordova Statusbar状态栏插件的使用
- Android json解析(FastJson Gson 对比)
- vim多窗口操作-------改变窗口布局
- python 对 Excel 的文件操作
- VB6.0 系统时间转换成时间戳
- 如何为码云(oschina)设置多个ssh key并配置
- 阿里专家为你讲解分布式数据库技术与实现
- 大数据在智能交通行业的应用
- 单例及double check lock
- VA01销售订单增强MV45AFZZ注意点
- CSS:制作三角形的原理
- 细说数字货币区块链技术的应用