注:该学习笔记是根据曾志贤老师编写的《从Excel到Python,用Python轻松处理Excel数据》所学习整理的笔记。
- 第四章 字符串处理技术
- 一、单、多字符切片
- 1、字符串切片
- 2、单字符切片
- 3、多字符切片
- 案例一、字符串切片根据身份z号判断性别
- 二、字符串统计
- 1、统计字符串长度
- 2、按条件统计字符串
- 案例一、字符串统计各等级出现的次数
- 三、字符串搜索
- 1、使用index函数搜索字符串位置
- 2、使用find函数搜索字符串位置
- 案例一、字符串搜索提取指定位置的信息
- 四、字符串替换
- 1、字符串替换方法
- 案例一、字符替换整理不规范的分隔符
- 五、字符串拆分和合并
- 1、拆分字符串为列表
- 2、合并列表为字符串
- 案例一、字符串拆分合并汇总多表中的不规范数据
2、单字符切片字符串切片就是截取字符串。可以利用字符串的切片特性进行提取、拆分、合并等 *** 作,但不能对字符串进行修改。
单字符切片是对字符串中指定位置的单个字符进行截取。
语法结构:字符串[索引位置],索引位置的序号是从0开始的。
txt='python基础的学习'
print(txt[0]) #正数,从左至右计算位数。 返回 p
print(txt[-1]) #负数,从右至左计算位数。 返回 习
3、多字符切片
语法结构:字符串[开始索引:结束索引:步长]
txt='python基础的学习'
print(txt[2:9]) #返回 thon基础的
print(txt[-10:-3]) #返回 ython基础
print(txt[:7]) #返回 python基
print(txt[:-5]) #返回 python
print(txt[7:]) #返回 础的学习
print(txt[-5:]) #返回 基础的学习
print(txt[2:-5]) #返回 thon
print(txt[-10:7]) #返回 ython基
print(txt[:]) #返回 python基础的学习
print(txt[::2]) #间隔一个字符获取 返回 pto基的习
print(txt[::-1]) #反转字符串 返回 习学的础基nohtyp
print(txt[::-2]) #反转字符串,间隔一个字符获取 返回 习的基otp
案例一、字符串切片根据身份z号判断性别
如图所示,在“员工信息”工作簿中的“信息”工作表,对B列身份z号码进行性别判断,18位身份z号,判断第17位数字;15位身份z号,判断第15位数字。如果数字是奇数,则性别为男性,反之为女性。将判断的结果写在C列,并另存。
import xlrd
from xlutils.copy import copy
wb=xlrd.open_workbook('员工信息.xls')
ws=wb.sheet_by_name('信息')
nwb=copy(wb)
nws=nwb.get_sheet('信息')
nws.write(0,2,'性别')
for num in range(1,ws.nrows):
txt=ws.cell_value(num,1) #读取num行的身份z号
sex_num=int(txt[14:17][-1]) #转换为整数型,然后截取15位至17位(左闭右开),然后提取最后1位。
if sex_num % 2 ==1: #判断余数为单数还是双数
sex='男'
else:
sex='女'
nws.write(num,2,sex) #写入指定位置
nwb.save('员工信息-1.xls')
二、字符串统计
1、统计字符串长度
使用len函数,对字符串、列表、元组等对象的长度或者项目个数进行统计。
语法结构:
len(s)
参数说明:
- s:参数可以是序列,例如字符串、元组、列表、字典、集合等。
txt='python第四章的学习'
print(len(txt)) #对字符串的长度进行统计 返回 12
txt=[2,3,5,7,10]
print(len(txt)) #对列表的个数进行统计 返回 5
2、按条件统计字符串
使用count函数,对指定写字符串在父字符串中出现的次数进行统计。
语法结构:
count(sub[,start[,end]])
参数说明:
- sub:必选参数,搜索的子字符串。
- start :可选参数,字符串开始搜索的位置,默认从第0字符开始。
- end:可选参数,字符串结束搜索的位置,默认搜索到字符串的最后。
txt='python第四章python的学习python的字符串统计学习'
print(txt.count('py')) #在“txt”中寻找“py”出现的次数
print(txt.count('py',2)) #在“txt”中的第3位字符开始寻找“py”出现的次数
print(txt.count('py',2,20)) #在“txt”中的第3位至第21位间,寻找“py”出现的次数
案例一、字符串统计各等级出现的次数
将下“成绩”工作簿中的,“成绩”工作表中的数据,分别按照:优、良、中、差统计次数。并将数据写在C列。
import xlrd
from xlutils.copy import copy
wb=xlrd.open_workbook('成绩.xls')
ws=wb.sheet_by_name('成绩')
nwb=copy(wb)
nws=nwb.get_sheet('成绩')
for num in range(1,ws.nrows):
ws_val=ws.cell_value(num,1)
txt=''
for num1 in '优良中差':
i='{}:{}'.format(num1,ws_val.count(num1))
txt +=i
nws.write(num,2,'{}'.format(txt))
nwb.save('成绩-1.xls')
三、字符串搜索
1、使用index函数搜索字符串位置搜索子字符串在父字符串中第一次出现的位置,可以使用index函数或者find函数。
注意:index函数与find函数都是模糊匹配,并非精准匹配。
比如字符串:‘甲24,甲2’
查找’甲2’字符时,会返回’甲24’字符的位置,因为’甲24’字符包含了’甲2’字符。
index函数用于从字符串中找出子字符串第一个匹配项的索引位置,如果查找的字符串不存在,则返回错误提示。
语法结构:
index(sub[,start[,end]])
参数说明:
- sub:必选参数,搜索的子字符串。
- start :可选参数,字符串开始搜索的位置,默认从第0字符开始。
- end:可选参数,字符串结束搜索的位置,默认搜索到字符串的最后。
txt='甲0,乙3,丙6,丁9,甲12,乙16,丙20,丁24'
print(txt.index('丁')) #返回 9
print(txt.index('丁',10)) #返回 24
print(txt.index('丁',1,12)) #返回 9
print(txt.index('甲甲')) #程序报错,因父字符串中无“甲甲”字符
2、使用find函数搜索字符串位置
find函数与index函数的功能一样,唯一的区别就是find函数不会报错,如果未匹配上将会返回“-1”。
语法结构:
find(sub[,start[,end]])
参数说明:
- sub:必选参数,搜索的子字符串。
- start :可选参数,字符串开始搜索的位置,默认从第0字符开始。
- end:可选参数,字符串结束搜索的位置,默认搜索到字符串的最后。
txt='甲0,乙3,丙6,丁9,甲12,乙16,丙20,丁24'
print(txt.find('丁')) #返回 9
print(txt.find('丁',10)) #返回 24
print(txt.find('丁',1,12)) #返回 9
print(txt.find('甲甲')) #因为在父字符串中找到“甲甲”字符串,故返回 -1
案例一、字符串搜索提取指定位置的信息
在“信息表”工作簿中的“信息表”工作表中,将A列的部门信息提取到对应的B列中。
import xlrd
from xlutils.copy import copy
wb=xlrd.open_workbook('信息表.xls')
ws=wb.sheet_by_name('信息表')
nwb=copy(wb)
nws=nwb.get_sheet('信息表')
for num in range(1,ws.nrows):
ws_val=ws.cell_value(num,0)
i=ws_val.find('(') #获取截取字符串的开始位置
j=ws_val.find(')') #后去截取字符串的结束位置
txt=ws_val[i+1:j]
nws.write(num,1,txt)
nwb.save('信息表-1.xls')
四、字符串替换
1、字符串替换方法替换字符串的本质就是有条件的对字符串进行修改。替换后的字符串生成新的内存地址,并非替换原有字符串的内存地址。
replace函数用于把字符串中指定的旧字符串替换为指定的新字符串,默认全部替换。
语法结构:
replace(old,new[,count])
参数说明:
- old:必选参数,被替换的旧字符串。
- new:必选参数,新字符串,用于替换旧字符串。
- count:可选参数,替换的次数,默认替换所有出现的旧字符串。
txt='A组-优秀;B组-良好;C组-优秀;D组-优秀;E组-一般'
print(txt.replace('优秀','晋级',0)) #将不进行替换
print(txt.replace('优秀','晋级')) #将所有 优秀 替换为 晋级
print(txt.replace('优秀','晋级',1)) #将第一个 优秀 替换为 晋级
print(txt.replace('优秀','晋级',2)) #将前两个 优秀 替换为 晋级
案例一、字符替换整理不规范的分隔符
将“员工表”工作簿中的“员工表”工作表里的B列名单进行处理,将每个姓名之间的分隔符统一成“-”。并将整理后的写在C列。
import xlrd
from xlutils.copy import copy
wb=xlrd.open_workbook('员工表.xls')
ws=wb.sheet_by_name('员工表')
nwb=copy(wb)
nws=nwb.get_sheet('员工表')
for num in range(1,ws.nrows):
txt=ws.cell_value(num,1) #提取需要替换的字符串
for i in '、\|': #将需要替换的符号进行循环
txt=txt.replace(i,'-') #将提取的字符串,替换后,在赋值给自己。
nws.write(num,2,txt)
nwb.save('员工表-1.xls')
五、字符串拆分和合并
1、拆分字符串为列表
split函数用于拆分字符串,可以指定分隔符对字符串进行切片,并返回拆分后的字符串列表。
语法结构:
split([sep][,maxsplit])
参数说明:
- sep:可选参数,表示分隔符,默认为空格(’ ‘),但不能为空(’')。分隔符可以是单个字符,也可以是多个字符。如果是多个字符,则被看作为一个整体。
- maxsplit:可选参数,表示要执行的最大拆解分数。-1为默认值,表示无限制。
txt='10 20 50'
txt1='7|9|10'
print(txt.split()) #默认以空格进行拆分 返回 ['10', '20', '50']
print(txt1.split('|')) #按照指定字符进行拆分 返回 ['7', '9', '10']
print(txt1.split('|',1)) #按照指定字符,指定拆分次数进行拆分 返回 ['7', '9|10']
2、合并列表为字符串
使用join函数进行合并
语法结构:
join(iterable)
参数说明:
- iterable:必选参数,可以是列表、元组等可迭代的对象(可循环的对象),但其中的值只能为字符串,不能是其他数据类型。
txt=['甲','18','财务部'] #列表
print('-'.join(txt)) #以“-”作为分隔符,将列表合并为字符串 返回 甲-18-财务部
txt1={'甲','18','财务部'} #集合
print('-'.join(txt1)) #以“-”作为分隔符,将集合合并为字符串 返回 甲-18-财务部
txt2=('甲','18','财务部') #元组
print('-'.join(txt2)) #以“-”作为分隔符,将元组合并为字符串 返回 甲-18-财务部
案例一、字符串拆分合并汇总多表中的不规范数据
将“业绩”工作簿中的,“1季度”、“2季度”、“3季度”、“4季度”工作表汇总到一个新工作表中。
import xlrd
from xlutils.copy import copy
wb=xlrd.open_workbook('业绩.xls')
ws_s=wb.sheets() #所有工作表
nwb=copy(wb)
nws=nwb.add_sheet('统计结果')
nws.write(0,0,'季度')
nws.write(0,1,'统计结果')
num,nums,lst=0,0,[]
for ws in ws_s: #循环所有工作表
num +=1 #该变量作为统计结果工作表的行号
for row_num in range(1,ws.nrows): #循环工作表的所有行
name=ws.cell_value(row_num,0) #读取A列
ws_val=ws.cell_value(row_num,1) #读取B列
for i in ws_val.split('、'): #将B列拆分成列表并进行循环
nums +=int(i) #将拆分的列表类型转换为int,在进行累加
lst +=[name+':'+str(nums)] #将A类名字与累加好的数值按照列表的形式进行组合,并进行累加。
nums=0 #将累加清空
nws.write(num,0,ws.name) #给统计结果工作表的A列输出值
nws.write(num,1,'\n'.join(lst)) #将lst列表进行组合,给统计结果工作表的B列输出值
lst=[] #将列表清空
nwb.save('业绩-1.xls')
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)