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 |
例如:
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对象转换为对应的字符串 |
例如:
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))