python操作Excel读写--使用xlrd

一、安装xlrd模块

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

二、使用介绍

  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 = 1  value = '单元格的值'
 
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()
复制代码






1.读取Excel(需要安装xlrd):


#-*- coding: utf8 -*-

import xlrd


fname = "reflect.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

#获取行数

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)


2.写入Excel(需安装pyExcelerator)

复制代码 代码如下:


from pyExcelerator import *

w = Workbook()     #创建一个工作簿

ws = w.add_sheet('Hey, Hades')     #创建一个工作表

ws.write(0,0,'bit')    #在1行1列写入bit

ws.write(0,1,'huang')  #在1行2列写入huang

ws.write(1,0,'xuan')   #在2行1列写入xuan

w.save('mini.xls')     #保存


3.再举个自己写的读写Excel的例子

读取reflect.xls中的某些信息进行处理后写入mini.xls文件中。 



#-*- coding: utf8 -*-

import xlrd

from pyExcelerator import *  


w = Workbook()  

ws = w.add_sheet('Sheet1') 

fname = "reflect.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

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 = []

mydata = []

for i in range(1,nrows):

    row_data = sh.row_values(i)

    pkgdatas = row_data[3].split(',')

    #pkgdatas.split(',')

    #获取每个包的前两个字段

    for pkgdata in pkgdatas:

        pkgdata = '.'.join((pkgdata.split('.'))[:2])

        mydata.append(pkgdata)

    #将列表排序

    mydata = list(set(mydata))

    print mydata

    #将列表转化为字符串

    mydata = ','.join(mydata)

    #写入数据到每行的第一列

    ws.write(i,0,mydata)

    mydata = []

    row_list.append(row_data[3])

#print row_list

w.save('mini.xls')


4.现在我需要根据Excel文件中满足特定要求的apk的md5值来从服务器获取相应的apk样本,就需要这样做: 

复制代码 代码如下:


#-*-coding:utf8-*-

import xlrd

import os

import shutil


fname = "./excelname.xls"

bk = xlrd.open_workbook(fname)

shxrange = range(bk.nsheets)

try:

    #打开Sheet1工作表

    sh = bk.sheet_by_name("Sheet1")

except:

    print "no sheet in %s named Sheet1" % fname

#获取行数

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 = []

#range(起始行,结束行)

for i in range(1,nrows):

    row_data = sh.row_values(i)

    if row_data[6] == "HXB":

        filename = row_data[3]+".apk"

        #print "%s  %s  %s" %(i,row_data[3],filename)

        filepath = r"./1/"+filename

        print "%s  %s  %s" %(i,row_data[3],filepath)

        if os.path.exists(filepath):

            shutil.copy(filepath, r"./myapk/")




xlrd是一个基于python的可以读取excel文件的产品。和pyExcelerator相比,xlrd的主要特点在于读的功能比较强大,提供了表单行数、列数、单元格数据类型等pyExcelrator无法提供的详细信息,使得开发人员无须了解表单的具体结构也能对表单中的数据进行正确的分析转换。

但是xlrd仅仅提供了读取excel文件的功能,不能像pyExcelrator那样生成excel文件。

Python对于office软件excel的读取一般都采用xlrd库:

1) 打开工作表:

复制代码 代码如下:

import xlrd

wb = xlrd.open_workbook('workbook_name')

wb = xlrd.open_workbook(file_contents = data)


2) 检查工作表名称,获取工作表:

复制代码 代码如下:

wb.sheet_names()

sh = wb.sheet_by_index(0)

sh = wb.sheet_by_name(u'Sheet1')


3) 查询数据:

i. 获取行数,列数:

复制代码 代码如下:

rows = sh.rows

cols = sh.cols


ii. 查询行数据:

复制代码 代码如下:

sh.row_values(row_num)


iii. 查询列数据:

复制代码 代码如下:

sh.row_values(col_num)


iv. 查询单元格数据:

复制代码 代码如下:

sh.cel(row_num, col_num).value



本文实例讲述了Python实现对excel文件列表值进行统计的方法。分享给大家供大家参考。具体如下:

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#!/usr/bin/env python
#coding=gbk
#此PY用来统计一个execl文件中的特定一列的值的分类
import win32com.client
filename = raw_input ( "请输入要统计文件的详细地址:" )
flag = 0    #用于判断文件 名如果不带‘日'就为 0
if '\xc8\xd5' in filename:flag = 1
print 50 * '=' + '\n\t 请稍等,程序正在统计中。。。'
try :
   xls = win32com.client.Dispatch( 'et.Application' )
   try :
     xlsfile = xls.Workbooks. Open (filename)
     #打开指定的文件,一般打开的是sheet1
     sheet = xlsfile.Worksheets( 'Sheet1' )
   except :
     print '文件找开错误!'
     exit( 1 )
     print '程序正在自动退出。。。'
   if sheet.Cells( 3 , 6 ).Value! = u '业务类型' or sheet.Cells( 3 , 3 ).Value! = u '转办单位' :
     print '您输入的表格已不是默认的表格,数据格式有误'
     exit( 1 ) #这个判断是当文件中的特定列改变时,直接退出程序
   i = 4
   dept = sheet.Cells(i, 3 ).Value
   type = sheet.Cells(i, 6 ).Value
   typelist = [] #用于存放数据的列表,下面就是取sheet表里的某一列数据
   deptlist = [] #用于存放转办单位的列表
   while type :
     typelist.append( type )
     deptlist.append(dept)
     i = i + 1
     type = sheet.Cells(i, 6 ).Value
     dept = sheet.Cells(i, 3 ).Value
   #存放列的数据到二个列表中
   counts = len (typelist) #总件数
   if counts = = 0 :
     print '输入的文件统计结果为0,是否文件的格式有误?'
     exit( 1 )
   typelist = [(i,typelist.count(i)) for i in set (typelist)]
   departmentlist = []
   delchar = '0123456789' #删除取出列表中有可能带数字 分开字段有空格的话
   for i in deptlist[:]:
     i = ''.join([j for j in i if j not in delchar])
     while '.' in i: i = i.replace( '.' , ' ' )
     deptlist + = i.split()
   deptlist = deptlist[counts:]
   deptlist = [(i,deptlist.count(i)) for i in set (deptlist)]
   #下面是打印格式等 。。。
   print '\n' + 50 * '='
   print '\t信访件总数为%d件,下面是各分类件数' % counts,
   print '\n' + 50 * '=' + '\n'
   for i in range ( len (typelist)):
     print '\t' ,typelist[ 0 ],typelist[ 1 ], '\t' ,
     if i % 2 = = 1 : print '\n'
   if flag = = 0 :
     print '\n' + 50 * '=' + '\n\t下面是转办单位的分类\n' + 50 * '='
     for i in range ( len (deptlist)):
       print '\t' ,deptlist[ 0 ],deptlist[ 1 ], '\t' ,
       if i % 2 = = 1 : print '\n'
finally :
   xls.Quit()
raw_input ( '\n\n' + 50 * '=' + '\n请输入回车键退出程序!' )
print '正在退出程序,请稍等。。。'




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


1.读取Excel(需要安装xlrd):


#-*- coding: utf8 -*-

import xlrd


fname = "reflect.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

#获取行数

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)


2.写入Excel(需安装pyExcelerator)

复制代码 代码如下:


from pyExcelerator import *

w = Workbook()     #创建一个工作簿

ws = w.add_sheet('Hey, Hades')     #创建一个工作表

ws.write(0,0,'bit')    #在1行1列写入bit

ws.write(0,1,'huang')  #在1行2列写入huang

ws.write(1,0,'xuan')   #在2行1列写入xuan

w.save('mini.xls')     #保存


3.再举个自己写的读写Excel的例子

读取reflect.xls中的某些信息进行处理后写入mini.xls文件中。 



#-*- coding: utf8 -*-

import xlrd

from pyExcelerator import *  


w = Workbook()  

ws = w.add_sheet('Sheet1') 

fname = "reflect.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

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 = []

mydata = []

for i in range(1,nrows):

    row_data = sh.row_values(i)

    pkgdatas = row_data[3].split(',')

    #pkgdatas.split(',')

    #获取每个包的前两个字段

    for pkgdata in pkgdatas:

        pkgdata = '.'.join((pkgdata.split('.'))[:2])

        mydata.append(pkgdata)

    #将列表排序

    mydata = list(set(mydata))

    print mydata

    #将列表转化为字符串

    mydata = ','.join(mydata)

    #写入数据到每行的第一列

    ws.write(i,0,mydata)

    mydata = []

    row_list.append(row_data[3])

#print row_list

w.save('mini.xls')


4.现在我需要根据Excel文件中满足特定要求的apk的md5值来从服务器获取相应的apk样本,就需要这样做: 

复制代码 代码如下:


#-*-coding:utf8-*-

import xlrd

import os

import shutil


fname = "./excelname.xls"

bk = xlrd.open_workbook(fname)

shxrange = range(bk.nsheets)

try:

    #打开Sheet1工作表

    sh = bk.sheet_by_name("Sheet1")

except:

    print "no sheet in %s named Sheet1" % fname

#获取行数

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 = []

#range(起始行,结束行)

for i in range(1,nrows):

    row_data = sh.row_values(i)

    if row_data[6] == "HXB":

        filename = row_data[3]+".apk"

        #print "%s  %s  %s" %(i,row_data[3],filename)

        filepath = r"./1/"+filename

        print "%s  %s  %s" %(i,row_data[3],filepath)

        if os.path.exists(filepath):

            shutil.copy(filepath, r"./myapk/")




xlrd是一个基于python的可以读取excel文件的产品。和pyExcelerator相比,xlrd的主要特点在于读的功能比较强大,提供了表单行数、列数、单元格数据类型等pyExcelrator无法提供的详细信息,使得开发人员无须了解表单的具体结构也能对表单中的数据进行正确的分析转换。

但是xlrd仅仅提供了读取excel文件的功能,不能像pyExcelrator那样生成excel文件。

Python对于office软件excel的读取一般都采用xlrd库:

1) 打开工作表:

复制代码 代码如下:

import xlrd

wb = xlrd.open_workbook('workbook_name')

wb = xlrd.open_workbook(file_contents = data)


2) 检查工作表名称,获取工作表:

复制代码 代码如下:

wb.sheet_names()

sh = wb.sheet_by_index(0)

sh = wb.sheet_by_name(u'Sheet1')


3) 查询数据:

i. 获取行数,列数:

复制代码 代码如下:

rows = sh.rows

cols = sh.cols


ii. 查询行数据:

复制代码 代码如下:

sh.row_values(row_num)


iii. 查询列数据:

复制代码 代码如下:

sh.row_values(col_num)


iv. 查询单元格数据:

复制代码 代码如下:

sh.cel(row_num, col_num).value



本文实例讲述了Python实现对excel文件列表值进行统计的方法。分享给大家供大家参考。具体如下:

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#!/usr/bin/env python
#coding=gbk
#此PY用来统计一个execl文件中的特定一列的值的分类
import win32com.client
filename = raw_input ( "请输入要统计文件的详细地址:" )
flag = 0    #用于判断文件 名如果不带‘日'就为 0
if '\xc8\xd5' in filename:flag = 1
print 50 * '=' + '\n\t 请稍等,程序正在统计中。。。'
try :
   xls = win32com.client.Dispatch( 'et.Application' )
   try :
     xlsfile = xls.Workbooks. Open (filename)
     #打开指定的文件,一般打开的是sheet1
     sheet = xlsfile.Worksheets( 'Sheet1' )
   except :
     print '文件找开错误!'
     exit( 1 )
     print '程序正在自动退出。。。'
   if sheet.Cells( 3 , 6 ).Value! = u '业务类型' or sheet.Cells( 3 , 3 ).Value! = u '转办单位' :
     print '您输入的表格已不是默认的表格,数据格式有误'
     exit( 1 ) #这个判断是当文件中的特定列改变时,直接退出程序
   i = 4
   dept = sheet.Cells(i, 3 ).Value
   type = sheet.Cells(i, 6 ).Value
   typelist = [] #用于存放数据的列表,下面就是取sheet表里的某一列数据
   deptlist = [] #用于存放转办单位的列表
   while type :
     typelist.append( type )
     deptlist.append(dept)
     i = i + 1
     type = sheet.Cells(i, 6 ).Value
     dept = sheet.Cells(i, 3 ).Value
   #存放列的数据到二个列表中
   counts = len (typelist) #总件数
   if counts = = 0 :
     print '输入的文件统计结果为0,是否文件的格式有误?'
     exit( 1 )
   typelist = [(i,typelist.count(i)) for i in set (typelist)]
   departmentlist = []
   delchar = '0123456789' #删除取出列表中有可能带数字 分开字段有空格的话
   for i in deptlist[:]:
     i = ''.join([j for j in i if j not in delchar])
     while '.' in i: i = i.replace( '.' , ' ' )
     deptlist + = i.split()
   deptlist = deptlist[counts:]
   deptlist = [(i,deptlist.count(i)) for i in set (deptlist)]
   #下面是打印格式等 。。。
   print '\n' + 50 * '='
   print '\t信访件总数为%d件,下面是各分类件数' % counts,
   print '\n' + 50 * '=' + '\n'
   for i in range ( len (typelist)):
     print '\t' ,typelist[ 0 ],typelist[ 1 ], '\t' ,
     if i % 2 = = 1 : print '\n'
   if flag = = 0 :
     print '\n' + 50 * '=' + '\n\t下面是转办单位的分类\n' + 50 * '='
     for i in range ( len (deptlist)):
       print '\t' ,deptlist[ 0 ],deptlist[ 1 ], '\t' ,
       if i % 2 = = 1 : print '\n'
finally :
   xls.Quit()
raw_input ( '\n\n' + 50 * '=' + '\n请输入回车键退出程序!' )
print '正在退出程序,请稍等。。。'




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

python 写入excel表格

from pyExcelerator import *

w = Workbook()

ws = w.add_sheet('Hey, Hades')

ws.write(0,0,'bit')

ws.write(0,1,'huang')

ws.write(1,0,1)

w.save('mini.xls')

需要注意的是从数据库取出来的数据(有中文)写到Excel会出现乱码。

解决办法:ws.write(i,j,k)改为ws.write(i,j,k.decode(codetype)) 

                其中codetype为你的mysql数据库的编码方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值