python处理excel(一):读
功能:读取一个excel里的第2个sheet,将该sheet的内容全部输出。
1 #coding=utf8 2 import xlrd 3 4 def read_excel(): 5 workbook = xlrd.open_workbook('demo.xlsx') 6 sheet2 = workbook.sheet_by_index(1) # sheet索引从0开始 7 rowNum = sheet2.nrows 8 colNum = sheet2.ncols 9 10 llst = [] 11 for i in range(rowNum): 12 lst = [] 13 for j in range(colNum): 14 lst.append(sheet2.cell_value(i, j)) 15 llst.append(lst) 16 17 for i in range(rowNum): 18 for j in range(colNum): 19 print llst[i][j],'\t\t', 20 print 21 22 if __name__ == '__main__': 23 read_excel()
notes:
python对于缩进非常严苛。如果最后两句话不小心向后缩进了一下,与17行的for对齐了,那说明这两句话是read_excel函数体内部的。那就乱套了。
指定一个excel里的具体哪一个sheet,即可以按序号顺序来定位(比如第一个sheet,第2个sheet),也可以按名字来找(比如第2个sheet如果名字叫‘Sheet2’的话,就用
workbook.sheet_by_name('Sheet2') 来定位sheet)
获取一个cell里面的内容,可以有多种方式,比如:
sheet2.cell_value(1,0)
sheet2.row(1)[0].value
sheet2.cell(1,0).value
注意。读取到的excel的表格里的值都是unicode模式的。这种情况下如果想正确输出的话,直接print就可以。比如放在list里面,依次对list的每个元素进行print。
但是不能直接print lst。这样的话打出来还是unicode的形式。
正常情况下对于unicode的对象,用encode可以将一个unicode对象转换为参数中编码格式的普通字符。这一部分可参考 ref ref2
print如果不想换行的话,直接在print结束后加一个逗号即可。
如果想实现c++里endl一样的换行,直接打上一行print就行了,不需要任何参数。
========= ========== ========= ========== ========= ==========
下面代码纯粹为了展示一下关于excel的其他操作。
ref1 ref2 ref3 (ref1代码很清晰,ref3列出了xlrd,xlwt的一些接口可以方便参考)
1 #coding=utf8 2 import xlrd 3 4 def read_excel(): 5 # 打开文件 6 workbook = xlrd.open_workbook('demo.xlsx') 7 # 获取所有sheet 8 #print workbook.sheet_names() # [u'Sheet1', u'Sheet2'] 9 sheet2_name = workbook.sheet_names()[1] 10 11 # 根据sheet索引或者名称获取sheet内容 12 sheet2 = workbook.sheet_by_index(1) # sheet索引从0开始 13 sheet2 = workbook.sheet_by_name('Sheet2') 14 15 # sheet的名称,行数,列数 16 print 'sheet的名称,行数,列数' 17 print sheet2.name,sheet2.nrows,sheet2.ncols 18 19 rowNum = sheet2.nrows 20 colNum = sheet2.ncols 21 # 获取整行和整列的值(数组) 22 rows = sheet2.row_values(3) # 获取第四行内容 23 cols = sheet2.col_values(2) # 获取第三列内容 24 print '第四行:' 25 print rows 26 27 llst = [] 28 for i in range(rowNum): 29 lst = [] 30 for j in range(colNum): 31 lst.append(sheet2.cell_value(i, j)) 32 llst.append(lst) 33 34 for i in range(rowNum): 35 for j in range(colNum): 36 print llst[i][j],'\t\t', 37 print 38 39 if __name__ == '__main__': 40 read_excel()
实例:
原excel:
像电话号码、年龄后面还带小数,还没来得及处理。