主要包括三个功能,读取excel数据,将数据写入excel并保存,在excel中追加数据并保存
三个主要模块: xlrd xlwt xlutils
1.数据的读取
(1)打开一个工作簿
(2)获取sheet表单
(3)通过sheet表单进行按行或按列读取
import xlrd #----打开工作簿--------- work_book = xlrd.open_workbook('实验.xlsx') #---获取sheet表单------- sheet_names = work_book.sheet_names() sheet_first = work_book.sheet_by_name(sheet_names[0]) #获取了第一个表单 #---通过sheet表单进行按行或按列读取--- #按行读取--- nrows = sheet_first.nrows print(nrows) for i in range(nrows): print(sheet_first.row_values(i)) #读取第i行 #按列读取--- ncols = sheet_first.ncols for j in range(ncols): print(sheet_first.col_values(j)) #---获取单元格信息------ print(sheet_first.cell_value(1,0)) #excel表格中 行列号是从零开始的
2.数据的写入
(1)创建一个工作簿
(2)在工作簿中添加一个表单
(3)写表头
(4)写内容
(5)保存
import xlwt head = ['姓名', '年龄', '学号', '年级'] data = [ ['小红', 10.0, 19910.0, '三年级'], ['小明', 10.0, 19911.0, '三年级'], ['小刚', 11.0, 19912.0, '三年级'], ['小黑', 12.0, 19913.0, '三年级'] ] #---创建一个工作簿--- work_book = xlwt.Workbook(encoding = 'utf-8') #---在工作簿中添加一个表单--- sheet = work_book.add_sheet(sheetname = '学生信息') #---写表头--- for i in range(len(head)): #设置循环的次数,head的长度就是列数 sheet.write(0,i,head[i]) #---写内容--- for i in range(len(data)): for j in range(len(head)): sheet.write(i+1,j,data[i][j]) #---保存--- work_book.save(r'C:UsersAdministratorDesktop实验结果.csv')
3.数据的追加
(1)打开工作簿
(2)读取第一个表单
(3)读取里面写入的行数
(4)将xlrd的workbook编程xlwt workbook对象
(5)写入信息
import xlrd,xlwt from xlutils.copy import copy info = [['天天',9,14599,'一年级'], ['小熊',15,20322,'八年级'], ['小白',14,19322,'七年级']] #---打开工作簿--- work_book = xlrd.open_workbook('实验结果.csv') #---获取第一个表单--- sheet_names = work_book.sheet_names() sheet_first = work_book.sheet_by_name(sheet_names[0]) #---读取里面写入的行数--- nrows = sheet_first.nrows #---将xlrd的workbook变成xlwtworkbook对象 work_book_new = copy(work_book) #---写入信息--- new_sheet = work_book_new.get_sheet(0) #写入行数 i = nrows for item in info: for j in range(sheet_first.ncols): new_sheet.write(i,j,item[j]) #写完一行,行数+1 i += 1 work_book_new.save(r'C:UsersAdministratorDesktop实验结果.csv')
应用:
import pandas as pd import os import xlrd,xlwt from xlutils.copy import copy path=r"C:UsersAdministratorDesktop一_3日间分时段" df_f=pd.DataFrame([]) #---创建文件,写表头--- list = ['六时','七时','八时','九时','十时','十一时','十二时','十三时','十四时','十五时','十六时','十七时'] ti = 0 head = ['预警类型',1,2,3,4,5,6] work_book = xlwt.Workbook(encoding = 'utf-8') #以写入的方式打开文档,没有则会新建一个文档 sheet = work_book.add_sheet(sheetname = '统计数据') #在工作簿中添加表单并定义表单名 #---写表头--- for i in range(len(head)): #设置循环的次数,head的长度就是列数 sheet.write(0,i,head[i]) #设置写入第0行,第i列,内容为 head[i] work_book.save('结果.csv') #保存文件,传入保存路径 for filename in os.listdir(path): #---读取工作簿中的内容--- #--打开工作簿-- work_book = xlrd.open_workbook(filename) #---获取sheet表单------- sheet_names = work_book.sheet_names() sheet_first = work_book.sheet_by_name(sheet_names[0]) #获取了第一个表单 #按列读取--- ncols = sheet_first.ncols l14 = sheet_first.col_values(14) # ---统计次数--- s1 = 0 s2 = 0 s3 = 0 s4 = 0 s5 = 0 s6 = 0 for i in range(len(l14)): if l14[i] == 1.0: s1 += 1 if l14[i] ==2.0: s2 += 1 if l14[i] == 3.0: s3 += 1 if l14[i] == 4.0: s4 += 1 if l14[i] == 5.0: s5 += 1 if l14[i] == 6.0: s6 += 1 res = [s1,s2,s3,s4,s5,s6] data = [list[ti]] for i in res: d = i/len(l14)*100 ret = ('%.2f%%'%d) data.append(ret) print(data) #--------追加内容---------- #---打开工作簿--- work_book = xlrd.open_workbook('结果.csv') #以读的方式打开工作簿 #---获取第一个表单--- sheet_names = work_book.sheet_names() #获取工作簿中所有的表单名 sheet_first = work_book.sheet_by_name(sheet_names[0]) #定位到第一个表单 #---读取里面写入的行数--- nrows = sheet_first.nrows #---将xlrd的workbook变成xlwt workbook对象 work_book_new = copy(work_book) #将工作簿变为可写入状态 #---写入信息--- new_sheet = work_book_new.get_sheet(0) #锁定第一张表单 #写入行数 i = nrows for j in range(len(data)): new_sheet.write(i,j,data[j]) #写入数据,第i行,第j列,内容为data[j] ti +=1 work_book_new.save('结果.csv') #将工作簿保存