分享

从零基础开始用python处理excel数据(xlrd、xlwt)

 乙甲壬 2020-05-30

我的第一篇Blog!本来想在520发的!
动动手,记录一下学习过程!
心之所向,无问西东!

一、读取Excel工作簿

-准备

1.pip安装+import导入 第三方库 xlrd、xlwt

#安装 xlrd、xlwtpip install xlrdpip install xlwt#导入 xlrd、xlwtimport xlrd #(读取)import xlwt #(写入)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

- 基础知识

1.读取工作薄

import xlrdwb = xlrd.open_workbook('工作簿.xls') #读取工作簿
  • 1
  • 2
  • 3
  • 4

2.读取工作薄下所有工作表

wsobj=wb.sheets()#读取工作薄下所有工作表对象wsname=wb.sheet_names()#读取工作薄下所有工作表标名称
  • 1
  • 2
  • 3
  • 4
  • 5

3.读取指定工作表对象

ws1=wb.sheet_by_name('工作表名')#按指定名称,读取工作表对象-方法一  (常用)ws2=wb.sheet_by_index(1)#按指定序号,读取工作表对象-方法二ws3=wb.sheet()[1]#按指定序号,读取工作表对象-方法三
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

- 实例引入

以该Excel为例,理解上述内容
以该Excel为例,理解上述内容

#打印test工作薄下所有工作表名称import xlrdwb = xlrd.open_workbook('test.xls')ws = wb.sheets()wsname = wb.sheet_names()print(wsname)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
打印结果:['数据1', '数据2', '数据3']
  • 1
  • 2

1.打印test工作薄下所有工作表对象及其名称

import xlrdwb = xlrd.open_workbook('test.xls')wsobj = wb.sheets()wsname = wb.sheet_names()print(wsobj)print(wsname)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
打印结果:[<xlrd.sheet.Sheet object at 0x10aaf1e90>, <xlrd.sheet.Sheet object at 0x10bd0cc10>, <xlrd.sheet.Sheet object at 0x10bd0ced0>]['数据1', '数据2', '数据3']
  • 1
  • 2
  • 3

2.三种方法打印指定工作表对象及名称

import xlrdwb = xlrd.open_workbook('test.xls')ws = wb.sheets()wsname = wb.sheet_names()ws1 = wb.sheet_by_name('数据1')ws2=wb.sheet_by_index(0)ws3=wb.sheets()[0]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
print(ws1)#打印结果#<xlrd.sheet.Sheet object at 0x10bc0da50>
  • 1
  • 2
  • 3
  • 4
print(ws2)print(ws2.name)#打印结果#<xlrd.sheet.Sheet object at 0x10bc98cd0>#数据1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
print(ws3)print(ws3.name)#打印结果:#<xlrd.sheet.Sheet object at 0x10bcba710>#数据1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

二、读取excel行和列

-基础知识

import xlrdws = xlrd.open_workbook('工作簿名.xls').sheet_by_name('工作表名')#获取工作表对象crow = ws.nrows#获取行数ccol = ws.ncools#获取列数
  • 1
  • 2
  • 3
  • 4
row_date = ws.row_values(行号)#获取指定行数据col_date = ws.col_values(列号)#获取指定列数据
  • 1
  • 2
cell_date_1 = ws.cell_value(行号,列号)#获取单元格数据cell_date_2 = ws.cell(行号,列号).value#获取单元格数据
  • 1
  • 2

-实例引入

数据

- 代码实现

import xlrdws = xlrd.open_workbook('test.xls').sheet_by_name('数据1')#获取工作表对象crow = ws.nrows#获取行数ccol = ws.ncols#获取列数print('该表有',crow,'行')print('该表有',ccol,'列')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

打印结果
该表有 6 行
该表有 3 列

import xlrdws = xlrd.open_workbook('test.xls').sheet_by_name('数据1')#获取工作表对象row_date = ws.row_values(0)#获取指定行数据print(row_date)
  • 1
  • 2
  • 3
  • 4
  • 5

打印结果
[1.0, ‘张三’, 19990101.0]

import xlrdws = xlrd.open_workbook('test.xls').sheet_by_name('数据1')#获取工作表对象col_date = ws.col_values(1)#获取指定行数据print(col_date)
  • 1
  • 2
  • 3
  • 4
  • 5

打印结果
[‘张三’, ‘李四’, ‘王二’, ‘麻子’, ‘周五’, ‘郑王’]

#写法import xlrdws = xlrd.open_workbook('test.xls').sheet_by_name('数据1')#获取工作表对象cell_date_1 = ws.cell_value(0,1)#获取单元格数据print(cell_date_1)#张三cell_date_2 = ws.cell(0,1).value#获取单元格数据print(cell_date_2)#张三
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

三、创建工作薄、工作表和写入单元格

-基础知识

import xlwtnwb = xlwt.Workbook(encoding='UTF-8')#新建工作簿nws = nwb.add_sheet('工作表名')#添加工作表nws.write(1,2,'要写入的值')#写入单元格nwb.save('工作簿名.xls')
  • 1
  • 2
  • 3
  • 4
  • 5
import xlwtnwb = xlwt.Workbook(encoding='UTF-8')#新建工作簿nws = nwb.add_sheet('成绩表')#添加工作表nws.write(1,2,'9999')#写入单元格nwb.save('成绩表.xls')
  • 1
  • 2
  • 3
  • 4
  • 5

四、for 循环

-基础知识

for s in range(10,20,1):    print(s)
  • 1
  • 2

打印结果
10
11
12
13
14
15
16
17
18
19

#拓展score = int(input('请输入分数:'))if score >= 90: print('good')else: print('not bad')#展示>请输入分数:93>good
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

-实例引入

案例一

在这里插入图片描述

import xlrd,xlwtwb = xlrd.open_workbook('成绩表.xls')ws = wb.sheet_by_name('成绩表')n = 0while n < ws.nrows-1:    n+=1    #print(ws.cell_value(n,0),ws.cell_value(n,1))    if ws.cell_value(n,0) == '李四':        print(ws.cell_value(n,1))       #打印结果58.0       
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

案例二

在这里插入图片描述

import xlrd,xlwtwb = xlrd.open_workbook('成绩表.xls')ws = wb.sheet_by_name('成绩表')nwb = xlwt.Workbook(encoding = 'UTF-8')nws = nwb.add_sheet('成绩表')n,m = 0,0while n < ws.nrows-1: n+=1 if ws.cell_value(n,1)>=60 and ws.cell_value(n,2)>=60: m+=1 nws.write(m,0,ws.cell_value(n,0)) nws.write(m,1,ws.cell_value(n,1)) nws.write(m,2,ws.cell_value(n,2))nwb.save('筛选结果.xls')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

五、字符串

-字符串的切片

字符串是常见的数据类型,Python中的字符串是不能修改的,只能做提取、拆分合并重组等操作

s = 'WHO我是谁'print(s[:3])#从左计算,从开头提取到指定位置print(s[3:])#从左计算,从指定位置到结束print(s[1:3])#从左计算,从指定起始位置到指定终止位置print(s[-3:-1])#从右计算,指定的起始位置到指定的终止位置print(s[-3:])#从右计算,指定的起始位置到结束print(s[:])#提取所有字符串print(s[3:-1])#打印结果WHO我是谁HO我是我是谁WHO我是谁我是
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

-字符串的查找

index

index 方法用于从字符串中找出某一个对象第一个匹配项的索引位置,如果查找的字符串不存在则会报出一个异常。

str.index(sub[,start=0[,end=len(str)]])str父字符串sub指定检索的子字符串start 可选参数,开始索引,默认为0.(可单独指定)end 可选参数,结束索引,默认为字符串长度.(不能单独指定)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
s = 'A组78,B组87,C组88,D组95,B组90'print(s.index('A组'))print(s.index('B组',6))print(s.index('B组',5,7))#0205
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

-字符串的计数

写入文件

import xlwtnwb = xlwt.Workbook(encoding = 'UTF-8')nws = nwb.add_sheet('统计')nwb.save('字符串count查找.xls')
  • 1
  • 2
  • 3
  • 4

count

在这里插入图片描述

import xlrd,xlwtfrom xlutils.copy import copyws = xlrd.open_workbook('字符串count查找.xls')ws = wb.sheet_by_name('统计')#重写统计表nwb=copy(wb)nws=nwb.get_sheet('统计')#提取第一列数据n=0while n<ws.nrows-1:    n+=1    s = ws.cell_value(n,1)#把ws.cell_value(n,1)弄成变量s    nws.write(n,2,s.count('优'))    nwb.save('字符串count计数.xls')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

-字符串的替换

replace 方法用于把字符串中指定的旧字符串替换成指定的字符串,如果指定count可选参数则替换指定的次数,默认为全部替换

str.replace(old,new[,count=str.count(old)])
old旧的字符串
new新的字符串

replace

import xlwtnwb = xlwt.Workbook(encoding='utf-8')nws = nwb.add_sheet('会计科目表')#nrow = ws.nrows #共有多少列(以最后一列计算,比如有多列,一列长度为8,一列为7,则显示8)#ncol = ws.ncols #有多少行nwb.save('account.xls')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
s = 'A-优秀;B-良好;C-优秀;D-优秀'print(s.replace('优秀','(good)'))print(s.replace('优秀','(good)',1))print(s.replace('优秀','(good)',2))
  • 1
  • 2
  • 3
  • 4
#打印结果A-(good);B-良好;C-(good);D-(good)A-(good);B-良好;C-优秀;D-优秀A-(good);B-良好;C-(good);D-优秀
  • 1
  • 2
  • 3
  • 4

-字符串拆分和合并

split

split方法拆分字符串。通过指定分隔符对字符串进行切片,并返回分割后的字符串列表(list)
语法结构:str.split(str='',num=string.count(str))

str 表示为分隔符,默认为空格,但是不能为空(‘’)。若字符串中没有分隔符,则把整个字符串作为一个列表元素。
num 表示分隔次数。如果存在参数num,则近分隔成num+1个字符串,并且每个字符串可以赋予一个新的变量

s = '张三、李 四、王二 麻子、小明'print(s.split())print(s.split('、 '))print(s.split('、 ',2))print(s.split('、 ',3))#打印结果['张三、李', '四、王二', '麻子、小明']['张三、李 四、王二 麻子、小明']['张三、李 四、王二 麻子、小明']['张三、李 四、王二 麻子、小明']
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

join

join()方法用于将序列中元素以指定的字符串连接生产一个新的字符串。
语法结构:str.join(sequence)
str 分隔符 可以为空
sequence 要连接的元素序列、字符串、元组、字典

i=['a','b','c']print('-'.join(i))print('\t'.join(i))#打印结果a-b-ca b c
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多