Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1829876
  • 博文数量: 636
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 3950
  • 用 户 组: 普通用户
  • 注册时间: 2014-08-06 21:58
个人简介

博客是我工作的好帮手,遇到困难就来博客找资料

文章分类

全部博文(636)

文章存档

2024年(5)

2022年(2)

2021年(4)

2020年(40)

2019年(4)

2018年(78)

2017年(213)

2016年(41)

2015年(183)

2014年(66)

我的朋友

分类: 系统运维

2015-08-03 17:20:14

一、安装xlrd模块

   到python官网下载模块安装,前提是已经安装了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()


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数据库的编码方式。


阅读(1232) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~