#python day06
字符串常用操作
1 拼接字符串
str1 = 'Are you seeing anyone?'
str2 = '没有,我只钟情于你'
print(str1 + '----' + str2)
字符串只允许与字符串拼接,其他类型数值需转换成字符串类型才可以拼接。
2 计算字符串的长度
str1 = 'Are you seeing anyone?'
str2 = '没有,我只钟情于你'
print(len(str1))
print(len(str2))
以上是默认情况下,len()函数计算长度时不区分大小写,所有字符只按一个字节来计算。采用GBK时汉字占2个字节,采用UTF-8时汉字占3个字节。
str1 = 'Are you seeing anyone?'
len1 = len(str1.encode()) #采用UTF-8编码
str2 = '没有,我只钟情于你'
len2 = len(str2.encode('gbk')) #采用GBK编码
print(len1)
print(len2)
3 截取字符串
string[start:end:step]
实例01:截取身份证号码中的出生日期
idcard = '4408xx20000501xxxx'
birthday = idcard[6:10] + '年' + idcard[10:12] + '月' + idcard[12:14] + '日'
print('身份证出生日期是:'+birthday)
4 分割、合并字符串
4.1 分割字符串
str.split(sep,maxsplit)
#sep:用于指定分隔符,默认为所有空字符(空格、换行、制表符)
#maxsplit:可选参数,不指定或为-1时,分割次数没有限制
str1 = '深 圳 大 学 官 网 --- www.shenzhendaxue.edu.com'
print('原来字符串:',str1)
print('采用默认分隔符分割:',str1.split())
print('采用多个字符分割的:',str1.split('---'))
print('采用.号进行分割:',str1.split('.'))
print('采用空格分割,且分割4次:',str1.split(' ',4))
print('采用-进行分割:',str1.split('-'))
#指定一个分割符,每分割一次,没有得到内容的就会产生一个空元素,
#分割3次获得两个空字符
实例02:输出被@好友的名称(去除@符号)
str1 = '@小栗旬 @柏原崇 @彭于晏'
str2 = str1.split(' ')
print('你@的好友有:')
for item in str2:
print(item[1:])
4.2 合并字符串
strnew = string.join(iterable)
#strnew:表示合并后新的字符串
#string:指定合并时的分隔符
#iterable:可迭代对象,该迭代对象中所有元素将被合并成为一个新的字符串
实例03:通过好友列表输出全部被@的好友
friend = ['小栗旬','柏原崇','彭于晏']
str1 = '@'.join(friend)
at = '@' + str1 #join()方法使用时第一个元素不加分隔符
print('您@的好友有:',at)
5 检索字符串
5.1 count()方法
count()方法用于检索字符串在另一个字符串中出现的次数,假如不存在则返回0
str.count(sub,start,end)
#sub:要检索的字符串
#start:从哪里开始检索,默认从头开始
#end:到哪里结束,默认结尾结束
str1 = '@小栗旬 @柏原崇 @彭于晏'
print('@出现次数',str1.count('@'))
5.2 find()方法
find()方法用于检索是否包含指定字符串,不存在返回-1,存在则返回首次出现该字符的索引值。
str.find(sub,start,end)
#sub:要检索的字符串
#start:从哪里开始检索,默认从头开始
#end:到哪里结束,默认结尾结束
str1 = '@小栗旬 @柏原崇 @彭于晏'
print('@首次出现位置',str1.find('@')) #结果返回0
print('!首次出现位置,'str1.find('!')) #结果返回-1
5.3 index()方法
index()方法跟find()方法一样,只不过index()检索字符串不存在时会抛出异常
5.4 startwith()方法和endwith()方法
这两种方法都是用来检索指定字符串开头或者结尾是否存在,可以参考我之前的文章《逢七拍腿游戏》里面有具体实例。
6 字母的大小写转换
lower()是用来进行转换为小写字母,upper()是用来进行转换为大写字母的。
实例04:不区分大小写验证会员名字是否为唯一
#已经注册的用户名用符号'|'分割开
username1 = '|MLXG|uzi|Letme|ZiTai|xiaohu|'
username2 = username1.lower()
str1 = input('请输入你的用户名')
str2 = '|'+str1.lower() + '|'
if str2 in username1
print('用户名已存在!')
else
print('用户名可以注册!')
7 去除字符串中的空格和特殊字符
strip()方法:去除字符串左右两侧的空格和特殊字符或者指定字符。
str.strip(str1)
#str1:指定要删除的字符,默认时为空格、制表符、换行符
rstrip():去除右侧
lstrip():去除左侧
8 格式化字符串
由于python2.6版本开始之后都使用format()方法来对字符串进行格式化,使用‘%’来格式化的方法本文就不再赘述。
str.format(args)
#str:指定字符串要显示的样式(模板)
#args:用于指定要转换的项,如果有多项时,用逗号隔开
下面来讲述如何创建模板
{index :(fill align)sign#width.precision type } #全部为可选参数
#index:用于指定格式化对象的索引位置,从0开始,如果省略则根据值的先后顺序自动分配
#fill:用于空白处填充的字符
#align:表示对齐方式('<'时表示内容左对齐,'>'表示内容右对齐,'='表示内容右对齐,符号在内容最左侧,'^'表示内容居中,需要配合width使用)
#sign:用于指定无符号数('+'表示正数加正号,负数加负号。'-'表示正数不变,负数加负号。空格时表示正数加空格,负数加负号。)
#:对于二进制、八进制和十六进制要加上'#'会显示前缀。
#width:表示指定要占的宽度
#.percision:表示要保留的小数位数
#type:用于指定类型。
格式化字符 | 说明 |
---|---|
s | 对字符串类型格式化 |
d | 十进制整数 |
c | 将十进制整数自动转换成对应的Unicode字符 |
e或者E | 转换成科学技术法表示再格式化 |
g或者G | 自动在e和f或者E和F中切换 |
b | 将十进制转换成二进制再格式化 |
o | 将十进制转换成八进制 |
x或者X | 十进制转换成十六进制 |
f或者F | 转换成浮点数(默认小数点保留6位) |
% | 显示百分比 |
实例05 格式化不同数值类型数据
import math # 导入Python的数学模块
print('1251+3950的结果是(以货币形式显示):¥{:,.2f}元'.format(1251+3950)) # 以货币形式显示
print('{0:.1f}用科学计数法表示:{0:E}'.format(120000.1)) # 用科学计数法表示
print('π取5位小数:{:.5f}'.format(math.pi)) # 输出小数点后五位
print('{0:d}的16进制结果是:{0:#x}'.format(100)) # 输出十六进制数
print('天才是由 {:.0%} 的灵感,加上 {:.0%} 的汗水 。'.format(0.01,0.99)) # 输出百分比,并且不带小数