python如何处理excel文件

此文档介绍一些读取excel的python模块。

学习地址:http://www.lexicon.net/sjmachin/README.html
http://www.lexicon.net/sjmachin/xlrd.html

我们先快速的来一个例子吧:
import xlrd
book = xlrd.open_workbook("myfile.xls")
print "The number of worksheets is", book.nsheets
print "Worksheet name(s):", book.sheet_names()
sh = book.sheet_by_index(0)
print sh.name, sh.nrows, sh.ncols
print "Cell D30 is", sh.cell_value(rowx=29, colx=3)
for rx in range(sh.nrows):
    print sh.row(rx)
   
General information
Acknowledgements(感谢)

开发这个模块的时候,是不可能不用到文档"OpenOffice.org's Documentation of the Microsoft Excel File Format" ("OOo docs" for short).
最新的版本也可以读取OPenOffice.org的PDF文档以及XML的文件格式。OOo文档的一小部分在我们的此文档中也是陈述了的。当然阅读OOo文档可以更加加深你对xlrd
模块的理解。


Unicode
该模块把excel文本以python的unicode形式提供的。从Excel 97以来在excel的表数据就是以unicode的形式保存的。更老一些的文件(Excel 95或者更早的)可能就不是以unicode的形式保存文本字符的在excel
里面。
如果的excel文本数据不是unicode形式的话,我们要现把文本格式的转换为unicode形式的,这样的话我们在xlrd.open_workbook()的第二个参数可以指明你原来的文档格式是什么,然后在根据
这个来转换:
eg:     book = xlrd.open_workbook(..., encoding_override="cp1252")

下面简单的介绍几个常用的方法:
open_workbook(filename=None, logfile=sys.stdout, verbosity=0, pickleable=True, use_mmap=USE_MMAP, file_contents=None, encoding_override=None, formatting_info=False, )
打开一个excel文件,下面我们来解释这些参数的含义:
filename: 需要打开的文件全路径地址
logfile: 一个已经打开了的文件对象,主要是记录一些excel读取时的信息和诊断信息的
verbosity: 增加跟踪材料等信息写入logfile所映射的文件对象
pickleable: 默认是true的,在python2.4或者是更早的时候,设置false的话将会使用array.array对象(为了节省空间,但是不能pickle起来的)。
在python2.5里面,array.array将会被无条件使用。注意:如果你有比较大的文件,并且需要多次读取数据的话,为了加快速度的话,你可以利用cPickle.dump()来pickle   xlrd的对象,
然后利用cPickle.load()来多次使用。

上面的函数返回的是一个Book类的实例对象,接下来我们就来研究Book类有哪些经常会使用到的方法:

Book 类的方法、属性等:
nsheets:  在Book对象中的文件有多少个worksheet
sheet_by_index(sheetx): 根据提供的sheetx索引来获取我们需要的sheet表,返回的是一个Sheet类的实例。
sheet_by_name(sheet_name): 根据提供的sheet_name来获取对应名称的sheet类对象,返回的也是一个Sheet类的对象
sheet_names(): 在Book对象中的所有sheet表的名称列表
sheets(): 返回在Book对象中所有的Sheet对象实例列表


我们研究完Book类,之后我们来继续研究Sheet类对象,
Sheet类方法、属性等:
cell(rowx, colx): 根据给出的行和列的参数获取得到cell类,返回一个Cell类实例对象
cell_type(rowx, colx): 返回对应的cell对象的Type类型
cell_value(rowx, colx): 返回对应的cell对象的value值
col(colx): 返回指定列的所有cell类对象序列
name: 返回sheet对象的名称
ncols: 返回在sheet对象中的列的数目
nrows: 返回在sheet对象中的行的数目
row(rowx): 返回指定的行的所有cell对象的序列


接下来我们研究Cell类,
Cell类的属性、方法如下:
Cell类对象有3种属性:ctype, value, xf_index
如果在excel文件打开的时候,formatting_info未启用的时候,xf_index是为None
下面列出了cell的类型,以及他们在python中所代表的值
type symbol          type number                python value
XL_CELL_EMPTY             0                      空的字符串''
XL_CELL_TEXT              1                      unicode字符串
XL_CELL_NUMBER            2                      float
XL_CELL_DATE              3                      float
XL_CELL_BOOLEAN           4                      int;1 --- True,0 --- False
XL_CELL_ERROR             5                      int代表是一个excel内部错误码;
XL_CELL_BLANK             6                      空的字符串'', 注意:这个类型仅仅会出现,当函数open_workbook(..,formatting_info=True)这样设置的时候


接下来我们举一个更复杂一点的例子:
import xlrd
fname = "sample.xls"
bk = xlrd.open_workbook(fname)
shxrange = range(bk.nsheets)
try:
    sh = bk.sheet_by_name("Sheet1")
except:
    print "no sheet in %s named Sheet1" % fname
    return None
nrows = sh.nrows
ncols = sh.ncols
print "nrows %d, ncols %d" % (nrows, ncols)

cell_value = sh.cell_value(1,1)
print cell_value

row_list = []
for i in range(1, nrows):
    row_data = sh.row_values(i)
    row_list.append(row_data)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值