python 字符串str 学习总结

1.字符串的表示方式:用引号/双引号将任意字符串引起来

例如:
a = 'abcd5sd6+f5as.x/dsf'
b = ''abcd5sd6+f5as.x/dsf''

要知道,字符串str是一种一旦创建了就不能修改的类型,下面的增删改查的改,其实是一种提出来修改以后再重新赋值回去的操作

2.字符串的增删改查

a.增加

●可以通过直接赋值的方式增加一个字符串

b.删除

●可以通过 del + 要删除的字符串 进行删除 例如: del a

●将字符串按指定顺序(从右往左,从左往右)把指定字符给去除掉(指定的字符,如果没有输入则默认为空格)

.lstrip() 去除字符串左边的指定字符
.rstrip() 去除字符串左边的指定字符
.strip() 头和尾都去除
 例如:
 
 
a = '123456'
print(a.strip('615')
print(a.lstrip('1'))
print(a.rstrip('6'))			
另外值得注意的是, 这个方法的运算逻辑是: 把你指定要去除的那个字符串(即上面例子中的615)拆开,一个元素一个元素的去和原字符串(即123456)做匹配。
比如把615分为6、1、5三个元素,分别和123456进行两头匹配,
左边:'1'属于6、1、5中的其中一个,删掉;接着是2,不属于6、1、5中的任何一个,所以左边的停止
右边:'6'属于6、1、5中的其中一个,删掉;接着是5,同样属于6、1、5中的其中一个,删掉;接下来是4,不属于它们3个中的任何一个,所以停止,结果就是'234'

c.修改

(这里为什么说了不可修改还能写着修改呢,因为这里所谓的'修改'只是将字符串提出来,将新的字符串(修改后的)再赋值回去的操作)

.format() 【将字符串中的占位符用指定的内容替换】
.format_map() 【将字符串中的占位符用指定的内容替换】
例如:
a = 'my name is {name} , age is {age}.'
print(a.format(name = 'capture',age = 999))
b = 'my name is {0} , age is {1}.'
print(b.format('capture',999))
c = 'my name is {name} , age is {age}.'
print(c.format_map({'name':'capture','age':999}))					

百分号拼接
%s 可以接收所有类型的元素,返回字符串
%d 只能接收数字
%f 接收的是小数

 【这里的's'可以认为是'string'的缩写,同样是和上面一样,这里的%s和%d可以认为是一个占位符】

例如:

a = 'my name is %s, my age is %s.' %('capture','999')		#%s还可以用%.2s、%.3s代替,意为截取字符串的前2、3位
b = '这里有一个浮点数%.2f' %(92.15674891318913)		#在这里,%.2f就是保留小数点后两位小数(四舍五入),当输入%f时就是不做省略
%'作字符串拼接因为是一个稍稍复杂的体系,会专门做一章出来总结


.expandtabs() 将字符串中的制表符全部用空格代替,使得字符串的长度以指定长度扩展(制表符空格数不指定的话默认是8
此方法会将字符串按照指定的长度扫描,当此长度的字符串内有制表符'\t',则将其替换为空格且最后包括空格和字符串的总长度等于指定的长度
例如:
 
 
a = 'name\t age\t sex\nxiaoming\t 18\t nan\n'
b = 'name\t age\t sex\nxiaoming\t 18\t nan\nxiaoming\t 18\t nan\nxiaoming\t 18\t nan\nxiaoming\t 18\t nan\n'
print(a.expandtabs(30))
print(b.expandtabs(30))

●字符串大小写互换

.capitalize() 首字母大写
.casefold() 整个字符串变小写【casefold比lower更全面】
.lower() 大写变小写
.upper() 小写变大写
.swapcase() 大小写互换

●字符串映射和替换

.maketrans() maketrans()和translate()是配合使用的
.translate()  
.replace() (原字符串里要替换的字符,新的字符,匹配的最大次数)

例如:

a = '一二三四五'
b = '12345'
c = str.maketrans(a,b)				#建立映射关系
d = b.replace('123','哈哈哈',3)
		
x = '15645641845642873一五三六七九二'
y = x.translate(c)
print(y)
print(d)

d.查询

首先因为字符串是可迭代对象,所以我们可以借助for循环拆解输出,其次我们还可以通过索引和切片的形式将其输出

.count()        (指定内容,开始位置,结束位置) 计算字符串中指定内容出现的次数
.find()        (指定内容,开始位置,结束位置) 在字符串中寻找指定内容并输出其在字符串中第一次出现的位置,如果没有找到即输出-1
.index() 和find()一样的一个方法,区别在于找不到会报错

a = 'abcdefgabcdefg'
print(a.count('bcd',4,10))
print(a.find('bcd',1,4))
#这里字符串的计数,用的是"闭区间,开区间"的方式(即'(0,1]'的方式),在计算结束位置的时候应该+1


●字符串的解码与编码

.encode()        (要转换的编码,转换出错的处理方式) 将字符串转换为指定的编码,返回bytes对象
.decode()        (与encode用法类似) 将指定的bytes对象转换为对应的字符串
.encode()默认的处理方式为“strict”,而这里可以写的所有值为'ignore', 'replace', 'xmlcharrefreplace', 'backslashreplace' 以及通过 codecs.register_error() 注册的任何值
例如:
a = '有钱真的是可以为所欲为的'
b = a.encode('utf-8')
print(b)
print(b.decode('utf-8'))				

3.字符串str的其他方法

a.设置一个宽度片段并将字符串居中、左、右表示(宽度,填充物)

.center() 居中
.ljust() 居左
.rjust() 居右
例如:
a = 'abcd'
print(a.center(40,'将'))



b.判断字符串是否以某个指定内容作为开头或者作为结尾(指定内容,开始位置,结束位置)【这里返回的是bool值】
.endswith() 结尾
.startswith() 开头
例如:
a = 'abcdefgh'
print(a.endswith('efg',2,7))
#和上面的count一样,这两个方法计算字符串的时候也用的"开区间,闭区间"的方式


c.一大堆判断的方法【返回bool值】

.isalnum() 是否只包含数字以及字母
.isalpha() 是否为字母(包括汉字)
.isdecimal() 是否为十进制数
.isdigit() 是否为数字【比.isdecimal()范围大】
.isnumeric() 是否为数字值【比.isdigit()范围大】
.isidentifier() 是否为标识符(例如'_123'和'def'就是返回的true,只要符合变量名的要求就ok)
.isprintable() 是否全部都能显示(例如字符串中的\n\t之类的就是不能显示的,有这些会输出false)
.isspace() 是否全是空格【\t也会输出true】
.istitle 是否为标题(首字母全是大写的英文语句就会被认为是标题)
.isupper

是否为大写字母

.islower() 是否为小写字母

        d.将字符串中的每一个元素拆开,用指定的内容将其连接成新的字符串(被拆开的字符串)
     .join()
例:
a = '我就是饿死,死外边,从这里跳下去,也不会学python\n真香'
b = '_'
print(b.join(a))
c = '我就是饿死,死外边,从这里跳下去,也不会学python\n真香'
print('_'.join(c))

#上面是单个字符串,这回是元组

d = ('我就是饿死','死外边','从这里跳下去','也不会学python','真香')
print('_'.join(d))

e.将字符串进行分割

.partition()  
.rpartition()  
.split() (指定要删除的字符串,匹配次数)
.rsplit()  
.splitlines() (ture和false #是否保留换行符)【.split()方法的变种,通过换行符来进行分割】


这里两个都是进行字符串分割,-r前缀代表从右往左的分割,split()方法分割字符串以后会把指定的那个字符串丢掉,而partition()方法不会且此方法指定次数只有一次

例如:

a = 'hedwsjfodiaspo'
print(a.partition('d'))
print(a.split('d',2))


猜你喜欢

转载自blog.csdn.net/capture2f/article/details/80188523