Excel操作

一、读取excel中的内容

students.xml里的内容如下:

 

import xlrd

book = xlrd.open_workbook('students.xls') #打开操作的文件
sheet = book.sheet_by_index(0) #选择文件内的sheet页
# sheet = book.sheet_by_name('sheet1') #获取sheert,同sheet_by_index,从0开始
print(sheet.cell(0,0).value) #指定单元格的内容
print(sheet.row_values(1))#取整行的数据
print(sheet.col_values(0))#取整列的数据
print(sheet.nrows) #总共多少行
print(sheet.ncols) #总多少列

运行结果:
id
['1', '小花']
['id', '1', '2', '3']
4
2

 二、修改excel内容

from xlutils import copy  #引用copy时,最好有这种方式
import xlrd
import os
book = xlrd.open_workbook('students.xls')
new_book = copy.copy(book) #修改文件时,最好不要再源文件上直接改
sheet = new_book.get_sheet(0) #选择sheet页
sheet.write(0,3,"score") #写入内容,行,列,内容
sheet.write(0,4,"sex")#写入内容,行,列,内容
os.rename('students.xls','students_bak1.xls') #先备份修改的文件内容,存在students_bak1.xls文件里
new_book.save('students.xls')#将修改的内容,保存再students.xls里

  会在同目录下生成一个文件students_bak1.xls

 

 

 students_bak1.xls里为修改前文件students.xls里的内容,students.xls里是修改后的内容

三、enumerate() 函数

enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。

语法

以下是 enumerate() 方法的语法:

enumerate(sequence, [start=0])

参数

  • sequence -- 一个序列、迭代器或其他支持迭代对象。
  • start -- 下标起始位置。

返回值

返回 enumerate(枚举) 对象。

例子一:

number = ['a','b','c','d']
for index,i in enumerate(number,1):
    print(index,i)
运行结果:
1 a
2 b
3 c
4 d

例子二:

data = [
	["1","小花",99,100,98.5],#1
	["2","小王",90,30.5,95],#
	["3","小明",67.5,49.6,88]#
]

for row,v in enumerate(data,1): #行序列从1开始,注意用法:入参为循环的对象+从几开始
    print(row,v)

运行结果:
1 ['1', '小花', 99, 100, 98.5]
2 ['2', '小王', 90, 30.5, 95]
3 ['3', '小明', 67.5, 49.6, 88]

  三、Excel有关的练习

方法一:

import xlwt

book = xlwt.Workbook()
sheet = book.add_sheet('sheet1')


title = ['编号','姓名','语文成绩','数学成绩','英语成绩','总分','平均分']
#处理表头
row = 0
for t in title:
    sheet.write(0,row,t)
    row+=1

data = [
	["1","小花",99,100,98.5],#1
	["2","小王",90,30.5,95],#
	["3","小明",67.5,49.6,88]#
]
row = 1
for v in data: #行v获取的["1","小花",99,100,98.5]
    col = 0
    sum_score = sum(v[2:])#算总分
    avg_score = round(sum_score / 3,2) #算平均分,保留2位小数
    v.append(sum_score) #把总分加到每个list里["1","小花",99,100,98.5]
    v.append(avg_score)#把平均分加到每个list里["1","小花",99,100,98.5]
    for value in v:
        sheet.write(row,col,value)
        col+=1
    row+=1

book.save("students.xls")  #xls/xlsx 再wps都可以 但是excel得xls才可以

  方法二:enumerate自动加序列

import xlwt

book = xlwt.Workbook()
sheet = book.add_sheet('sheet1')

title = ['编号','姓名','语文成绩','数学成绩','英语成绩','总分','平均分']
#处理表头
row = 0
for t in title:
    sheet.write(0,row,t)
    row+=1

data = [
	["1","小花",99,100,98.5],#1
	["2","小王",90,30.5,95],#
	["3","小明",67.5,49.6,88]#
]

for row,v in enumerate(data,1): #行序列从1开始
    sum_score = sum(v[2:])#算总分
    avg_score = round(sum_score / 3,2) #算平均分
    v.append(sum_score)
    v.append(avg_score)
    for col,value in enumerate(v):
        sheet.write(row,col,value)

book.save("students.xls")  #xls/xlsx 再wps都可以 但是excel得xls才可以

  

 

posted @ 2020-05-26 16:35  MLing  阅读(205)  评论(0编辑  收藏  举报