python操作Excel读写--使用xlrd

From: http://www.cnblogs.com/lhj588/archive/2012/01/06/2314181.html

一、安装xlrd模块

   到python官网下载http://pypi.python.org/pypi/xlrd模块安装,前提是已经安装了python 环境。

也可以在命令行执行:easy_install xlrd (注意权限)


二、使用介绍

  1、导入模块

      import xlrd

   2、打开Excel文件读取数据

      data = xlrd.open_workbook('excelFile.xls')

   3、使用技巧

       获取一个工作表

 

        table = data.sheets()[0]          #通过索引顺序获取
        table = data.sheet_by_index(0) #通过索引顺序获取

 

        table = data.sheet_by_name(u'Sheet1')#通过名称获取
       获取整行和整列的值(数组)
         table.row_values(i)
         table.col_values(i)
       获取行数和列数
  
        nrows = table.nrows
        ncols = table.ncols
       
循环行列表数据
        for i in range(nrows ):
      print table.row_values(i)
单元格
cell_A1 = table.cell(0,0).value
cell_C4 = table.cell(2,3).value
使用行列索引
cell_A1 = table.row(0)[0].value
cell_A2 = table.col(1)[0].value
简单的写入
row = 0
col = 0
# 类型 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error
ctype = 1value = '单元格的值'
xf = 0# 扩展的格式化
table.put_cell(row, col, ctype, value, xf)
table.cell(0,0)  #单元格的值'
table.cell(0,0).value #单元格的值'

 

三、Demo代码

   Demo代码其实很简单,就是读取Excel数据。

   

复制代码
 1 # -*- coding: utf-8 -*- 
 2 import  xdrlib ,sys
 3 import xlrd
 4 def open_excel(file= 'file.xls'):
 5     try:
 6         data = xlrd.open_workbook(file)
 7         return data
 8     except Exception,e:
 9         print str(e)
10 #根据索引获取Excel表格中的数据   参数:file:Excel文件路径     colnameindex:表头列名所在行的所以  ,by_index:表的索引
11 def excel_table_byindex(file= 'file.xls',colnameindex=0,by_index=0):
12     data = open_excel(file)
13     table = data.sheets()[by_index]
14     nrows = table.nrows #行数
15     ncols = table.ncols #列数
16     colnames =  table.row_values(colnameindex) #某一行数据 
17     list =[]
18     for rownum in range(1,nrows):
19 
20          row = table.row_values(rownum)
21          if row:
22              app = {}
23              for i in range(len(colnames)):
24                 app[colnames[i]] = row[i] 
25              list.append(app)
26     return list
27 
28 #根据名称获取Excel表格中的数据   参数:file:Excel文件路径     colnameindex:表头列名所在行的所以  ,by_name:Sheet1名称
29 def excel_table_byname(file= 'file.xls',colnameindex=0,by_name=u'Sheet1'):
30     data = open_excel(file)
31     table = data.sheet_by_name(by_name)
32     nrows = table.nrows #行数 
33     colnames =  table.row_values(colnameindex) #某一行数据 
34     list =[]
35     for rownum in range(1,nrows):
36          row = table.row_values(rownum)
37          if row:
38              app = {}
39              for i in range(len(colnames)):
40                 app[colnames[i]] = row[i]
41              list.append(app)
42     return list
43 
44 def main():
45    tables = excel_table_byindex()
46    for row in tables:
47        print row
48 
49    tables = excel_table_byname()
50    for row in tables:
51        print row
52 
53 if __name__=="__main__":
54     main()
复制代码


=============================================================

以下为本人的一点亲身经历:

#-*- coding: utf8 -*-
import xlrd, sysreload(sys)
sys.setdefaultencoding('utf8')def getTrans(fname, sheetName):bk = xlrd.open_workbook(fname)try:#sh = bk.sheet_by_name(sheetName)sh = bk.sheets()[0]except:print "no sheet in %s named %s" %(fname, sheetName)nrows = sh.nrows    # 行数ncols = sh.ncols    # 列数flog = open("1.log", "w")       # 创建日志文件trans = {}for j in range(ncols):v = sh.cell_value(0, j).encode("utf8")if v == "译文":for i in range(1, nrows):v0 = sh.cell_value(i, j-1).encode("utf8")   # 原文v1 = sh.cell_value(i, j).encode("utf8")     # 译文if v0 !="" and v1 != "":if not trans.has_key(v0):trans[v0] = v1                      # 组成字典的: key -> valueflog.write("[%s]\t=\t[%s]\n" %(v0, v1))flog.close()return transdef saveTrans(trans, outfile):      # 保存字典数据到文件fout = open(outfile, "w")for d, x in trans.items():fout.write("[%s]\t=\t[%s]\n" %(d, x))fout.close()def run(fname, sheetName):trans = getTrans(fname, sheetName)saveTrans(trans, "trans.list")if __name__ == '__main__':fname = "girl.xls"sheetName = "Sheet1"run(fname, sheetName)

girl.xls的文件结构大致如下:



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/403263.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

el-table自动充满,且无滚动条;el-table某列的列宽自适应,其他列按比例分配。

情景一:例如首列按照内容自适应展开,其余列有各自的比例。这样设置,就不会出现滚动条。 注意点: 给需要自适应展开的列加 :width"flexColumnWidth"计算方法 就可以自适应展开需要给余下所有的列都设置 width“auto” mi…

DataGridView控件中显示图片及其注意事项 【z】

windows Forms编程里面有一个DataGridView控件,它不光是可以显示数据,可以显示按钮,复选框,甚至还可以显示图片。这些图片可以来自于数据库(用二进制的方式存储的),也可以来自文件系统。下面是一…

在winform上内嵌入其它的程序

这段代码很有意义,用于把一个程序的界面嵌入到我们自己程序的某个指定窗体上. 比如在某个项目里,我需要把基恩士的激光扫描轮廓显示给客户看,但是激光的DLL中并没有这种功能提供. 于是我想先启动激光的官方程序用以显示轮廓, 然后再把这种显示界面嵌入到我自己程序的界面上指定…

SPI总线时序

SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来…

js计算浮点数出现小数;解决js计算小数问题;js数组相加出现小数;

原博1 原博2 方案1和方案2都是有效的 注意参数一定要是数字 而不能是字符串 否则会计算错误 情景: 在计算浮点数时候,出现多余小数。 例如: 1.11 1 2.1100000000000003 为什么计算小数会出现误差? 浮点数值的最高进度是17位…

VMware安装系统时没有弹出分区设置

在安装虚拟机系统的时候,有时候会遇到在安装一些镜像时没有弹出分区设置的画面,比如,我在使用 VMware 安装 CentOS 的时候,在选择完镜像,设置好启动安装的时候系统自动为我划分了 3 个分区:/boot、/、swap分…

如何在postgresql中模拟oracle的dual表,来测试数据库最基本的连接功能?

还好,网上弄到的,,没有dual的数据库,可以试图用select函数不带from数据表的方式来实现返回值。 一段测试代码: try:conn psycopg2.connect(databasedb.service_name, userdb.username, passwordpassword, hostdb.ip, …

vue+element实现树状表格的增删改查;使用el-table树形数据与懒加载实现树状表格增删改查

以下代码可以直接复制使用 一、情景: 列表是一个树状表格,可以无限添加下级,以及对列表的某一行进行增删改查(目前查没有写)。 原博链接 二、本篇是在原博主的代码基础上添加了部分功能。 功能1: 给树状表格…

ISCSI 1-由零开始

iSCSI的概念 iSCSI,即Internet SCSI,是IETF制订的一项标准,用于将SCSI数据块映射为以太网数据包。从根本上说,它是一种基于IP Storage理论的新型存储技术,该技术将存储行业广泛应用的SCSI接口技术与IP网络技术相结合&a…

存储技术与iSCSI

本章主要介绍基于IP SAN的网络存储iSCSI。iSCSI技术以其低廉的构建成本和优秀的存储性能,博得了很多CIO和存储管理员的喜爱,目前陆续进入企业应用领域,推动了企业的存储环境向集中式转变。虽然,目前对于iSCSI应该在什么样的环境中…

lvs和HA的高可用性

Heartbeat实现Lvs高可用和HA高可用效果图如下1、heartbeat的介绍Heartbeat 项目是 Linux-HA 工程的一个组成部分,它实现了一个高可用集群系统。心跳服务和集群通信是高可用集群的两个关键组件,在 Heartbeat 项目里,由 heartbeat 模块实现了这…

输入框限制只能输入数字,正数、负数、0,最多两位小数;数字输入框可以输入负数,并最多保留两位小数;el-number-input去掉四舍五入和自动补齐小数;

场景: –要求1:输入框只能输入数字,可以使正数、负数、0,小数点最多保留两位。 –要求2:不需要自动补齐小数点,也不需要自动四舍五入。 element-ui的数字输入框el-input-number只能满足要求1,所…

【工具】Win 7/8/10 下使用 VC++6.0

Microsoft Visual C(也就是 MSVC或者VC),是大部分计算机专业学生接触的第一款编译器。它具有轻量,界面简洁等优点,也是许多计算机考试的指定工具。VC6.0已经推出近20年,仍旧深受许多编程人员的喜爱&#xf…

【maven3学习之一】window7下maven环境搭建

2019独角兽企业重金招聘Python工程师标准>>> 软件准备: jdk-7u10-windows-i586 apache-maven-3.0.4-bin maven介绍: 按照一般的套路老说应该要说明一下maven,觉得maven就是一个项目管理的框架,因为之前的一个项目对mav…

解决去除“请输入有效值。两个最接近的有效值分别为1和2“提示

场景:el-input输入框,hover上去会有"请输入有效值。两个最接近的有效值分别为1和2"提示。 只需要给el-input加上属性 :step“0.01” 即可,注意精确度与你的小数点位数有关。也就是说如果你是三位小数点,那就是:step“0.…

【贪心】Vijos P1615 旅行

题目链接: https://vijos.org/p/1615 题目大意: N条路,路的高度给你,走一条路的耗费体力是从上一条路的高度到当前路高度的绝对值差。 可以改变一条路的高度,耗费的体力等于改变前后的路高度差。求最小耗费体力。 题目…

向 Web 开发人员推荐35款 JavaScript 图形图表库

From: http://www.cnblogs.com/lhb25/p/35-javascript-chart-and-graph-libraries.html 图表是数据图形化的表示,通过形象的图表来展示数据,比如条形图,折线图,饼图等等。可视化图表可以帮助开发者更容易理解复杂的数据&#xff…

解决列表某项文字过度过多 需要自适应撑开高度展示 其他项目按照行高居中

解决列表某项文字过度过多 需要自适应撑开高度展示 其他项目按照行高居中 以下代码可直接复制&#xff1a; 两种方法&#xff1a;分别是方法1&#xff1a;bfc配合浮动撑高 其他项目子绝父相 方法二&#xff1a;第一项也是相对定位&#xff08;不推荐&#xff09; <templat…

uni-app更新某个组件版本;uni-app更新插件版本;uni-app更新uni_modules插件;uni-app小程序更新某一个组件的版本库

uni-app官方介绍的更新某一个组件的uni_modules方法 注意&#xff1a;本篇只是记录更新uni-app的组件库下某一个组件的版本。不是更新微信小程序版本。 场景原因&#xff1a;项目最初是去年开发的&#xff0c;当时下载了uni-app的自带组件库。但是时间筛选器uni-datetime-picke…

课文《小站》

小站 --作者&#xff1a;袁鹰 这是一个铁路线上的小站&#xff0c;只有慢车才停两三分钟。快车疾驰而过&#xff0c;旅客们甚至连站名还来不及看清楚。 就在这一刹那&#xff0c;你也许看到一间红瓦灰墙的小屋&#xff0c;一排漆成白色的小栅栏&#xff0c;或者还有三五个人影…