目录
字符串归根是序列,序列就可以使用切片的方法。
x = "12321"
"是回文数" if x == x[::-1] else "不是回文数"
1、字符串的大小写和对齐
>>> x = "I love FishC"
>>> x.capitalize() #字符串的首字母变成大写,其他变成小写
'I love fishc'
>>> x.casefold() #所有字母小写
'i love fishc'
>>> x.title() #所有单词首字母变成大写,其他变小写
'I Love Fishc'
>>> x.swapcase() #大小写反转
'i LOVE fISHc'
>>> x.upper() #所有大写
'I LOVE FISHC'
>>> x.lower() #所有小写,只能处理英文
'i love fishc'
左中右对齐
>>> x = "有内鬼,停止交易!"
>>> x.center(15) #wide参数若小于字符长度直接原字符输出,空格填充
' 有内鬼,停止交易! '
>>> x.ljust(15) #左对齐
'有内鬼,停止交易! '
>>> x.rjust(15) #右对齐
' 有内鬼,停止交易!'
>>> x.zfill(15) #多余宽度前面添加0
'000000有内鬼,停止交易!'
>>> "520".zfill(5)
'00520'
>>> "-520".zfill(5)
'-0520'
>>> x.center(15, "淦") #用淦代替空格填充
'淦淦淦有内鬼,停止交易!淦淦淦'
>>> x.ljust(15, "淦")
'有内鬼,停止交易!淦淦淦淦淦淦'
>>> x.rjust(15, "淦")
'淦淦淦淦淦淦有内鬼,停止交易!'
2、字符串的查找替换
查找
>>> x = "上海自来水来自海上"
>>> x.count("海")
2
>>> x.count("海", 0, 5)
1
>>> x.find("海") #从左往右找,返回索引
1
>>> x.rfind("海") #从右往左找
7
>>> x.find("龟") #查不到返回-1
-1
>>> x.index("龟")
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
x.index("龟")
ValueError: substring not found
替换
有关字符串替换的方法 expandtabs(),使用空格来替换制表符,并且返回新的字符串,不要在代码里面混合使用空格和tab。
replace(old,new,count=-1),返回一个将所有old的参数指定的子字符串替换为new参数指定的新字符串,count代表替换次数,默认-1。
translate(table),返回一个根据table参数转换后的新字符串,这个参数的名字叫table,用于指定一个转换规则的表格,表格生成用str.maketrans(x[,y,[,z]]),也就是建立的表格内容替换,如果语句中含有表格的内容就会被替换,没有就不变。类似摩斯密码表;str.maketrans()还支持第三个参数,表示将指定的字符串给忽略。
"在吗,我在你家楼下,快点下来".replace("在吗","想你")
'想你,我在你家楼下,快点下来'
table = str.maketrans("ABCDEFG","1234567")
"i love FishC".translate(table) #'i love 6ish3'
"i love FishC".translate(str.maketrans("ABCDEFG","1234567"))
"i love FishC".translate(str.maketrans("ABCDEFG","1234567","love"))
#'i 6ish3'
判断
startswith(prefix[,start[,end]]),判断参数指定的子字符串是否出现在字符串的起始位置;对用的endswith(suffix[,start[,end]])判断参数指定的子字符串是否出现在字符串的结束位置。这里发现都有start和end两个可选参数,
x = "我爱python"
x.startswith("我") #True
x.startswith("你") #False
x.endswith("py") #False
x.endswith("on") #True
x.startswith("我",1) #False,从索引值为1开始匹配
x.startswith("爱",1) #True
x.endswith("py",0,4) #True,从下标为0到下标为4
x = "她爱python"
if x.startswith(("你","我","她")):
print("匹配成功") #匹配成功,元组里面
x = "I Love Python"
x.istitle() #True,判断一个字符串中的所有单词是否都是以大写字母开头,其余字母均为小写
x.isupper() #False判断一个字符串中所有字母是否都是大写
x.upper().isupper() #True从左往后依次调用,先将所有字符串全部转换大写后再判断
"""如果判断小写就用islower"""
同样还有其他的判断函数(图源小甲鱼python教学视频)
如果你想判断一个字符串是否为 Python 的保留标识符,就是像 “if”、“for”、“while” 这些关键字的话,可以使用 keyword 模块的 iskeyword() 函数来实现:
>>> import keyword
>>> keyword.iskeyword("if")
True
>>> keyword.iskeyword("py")
False
截取
" 左侧不要留白".lstrip()
#'左侧不要留白'
"右侧不要留白 ".rstrip()
#'右侧不要留白'
" 左右不要留白 ".strip()
#'左右不要留白'
"www.ilovefishc.com".lstrip("wcom.")
#'ilovefishc.com',当截取到指定的参数字符后一直截取到没有指定的为止
#按照单个字符为单位进行匹配剔除,这里剔除'w''c''o''m''.'5个字符从左开始剔除到i匹配不到了结束
"www.ilovefishc.com".rstrip("wcom.")
#'www.ilovefish'
"www.ilovefishc.com".strip("wcom.")
#'ilovefish'
如果只是希望踢掉一个具体的子字符串,那么你可以考虑 removeprefix(prefix) 和 removesuffix(suffix) 这两个方法。它们允许你指定将要删除的前缀或后缀:
>>> "www.ilovefishc.com".removeprefix("www.")
'ilovefishc.com'
>>> "www.ilovefishc.com".removesuffix(".com")
'www.ilovefishc'
拆分和拼接
拆分字符串,言下之意就是把字符串给大卸八块,比如 partition(sep) 和 rpartition(sep) 方法,就是将字符串以 sep 参数指定的分隔符为依据进行切割,返回的结果是一个 3 元组(3 个元素的元组):
>>> "www.ilovefishc.com".partition(".")
#('www', '.', 'ilovefishc.com')按点进行切割
>>> "ilovefishc.com/python".partition("/")
#('ilovefishc.com', '/', 'python')按/进行切割
split(sep=None, maxsplit=-1) 和 rsplit(sep=None, maxsplit=-1) 方法则是可以将字符串切成一块块:
>>> "苟日新,日日新,又日新".split(",")
#['苟日新', '日日新', '又日新']
>>> "苟日新,日日新,又日新".rsplit(",")
#['苟日新', '日日新', '又日新']从右向左
>>> "苟日新,日日新,又日新".split(",", 1)
#['苟日新', '日日新,又日新']从左往右切1次
>>> "苟日新,日日新,又日新".rsplit(",", 1)
#['苟日新,日日新', '又日新']从右往左切1次
拼接:
join(iterable) 方法是用于实现字符串拼接的。虽然的它的用法在初学者看来是非常难受的,但是在实际开发中,它却常常是受到大神追捧的一个方法。字符串是作为分隔符使用,然后 iterable 参数指定插入的子字符串:很有用!!
>>> ".".join(["www", "ilovefishc", "com"])
'www.ilovefishc.com'
>>> "^".join(("F", "ish", 'C'))
'F^ish^C'
>>> "".join(("FishC", "FishC"))
'FishCFishC'
3、格式化字符串
在字符串中,格式化字符串的套路就是使用一对花括号({})来表示替换字段,就在原字符串中先占一个坑的意思,然后真正的内容被放在了 format() 方法的参数中。以下为和 format() 常用的方法。
format_spec ::= [[fill]align][sign][#][0][width][grouping_option][.precision][type]
fill ::= <any character>
align ::= "<" | ">" | "=" | "^"
sign ::= "+" | "-" | " "
width ::= digit+
grouping_option ::= "_" | ","
precision ::= digit+
type ::= "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"
>>> year = 2010
>>> "鱼C工作室成立于 year 年。"
#'鱼C工作室成立于 year 年。'
>>> "鱼C工作室成立于 {} 年。".format(year)
#'鱼C工作室成立于 2010 年。'
>>> "1+2={}, 2的平方是{},3的立方是{}".format(1+2, 2*2, 3*3*3)
#'1+2=3, 2的平方是4,3的立方是27'
>>> "{1}看到{0}就很激动!".format("小甲鱼", "漂亮的小姐姐")
#'漂亮的小姐姐看到小甲鱼就很激动!'
>>> "{0}{0}{1}{1}".format("是", "非")
#'是是非非'
>>> "我叫{name},我爱{fav}。".format(name="小甲鱼", fav="Pyhon")
#'我叫小甲鱼,我爱Pyhon。'
>>> "我叫{name},我爱{0}。喜爱{0}的人,运气都不会太差^o^".format("python", name="小甲鱼")
#'我叫小甲鱼,我爱python。喜爱python的人,运气都不会太差^o^'
如果我只是想单纯的输出一个纯洁的花括号,那应该怎么办呢?
>>> "{}, {}, {}".format(1, "{}", 2)
'1, {}, 2'
>>> "{}, {{}}, {}".format(1, 2)
'1, {}, 2'
对齐:[align]
>>> "{:^}".format(250)
'250'
>>> "{:^10}".format(250)
' 250 '
>>> "{1:>10}{0:<10}".format(520, 250)
' 250520 '
>>> "{left:>10}{right:<10}".format(right=520, left=250)
' 250520 '
冒号是必须的,冒号左边是索引和关键字。
填充选项([fill])
在指定宽度的前面还可以添加一个 '0',则表示为数字类型启用感知正负号的 '0' 填充效果:
>>> "{:010}".format(520)
'0000000520'
>>> "{:010}".format(-520)
'-000000520'
>>> "{1:%>10}{0:%<10}".format(520, 250)
'%%%%%%%250520%%%%%%%'
>>> "{:0=10}".format(520)
'0000000520'
>>> "{:0=10}".format(-520)
'-000000520'
符号
"{:+}{:-}".format(520,-520)
#'+520-520',正数前面加正,负数前面加负
"{:,}".format(1234)
#'1,234',千分位分隔符
"{:_}".format(1234)
#'1_234',千分位分隔符
"{:_}".format(123)
#'123'数字个数不够,不显示
"{:,}".format(123456789)
#'123,456,789'
精度
精度([.precision])选项是一个十进制整数,对于不同类型的参数,它的效果是不一样的:
- 对于以 'f' 或 'F' 格式化的浮点数值来说,是限定小数点后显示多少个数位
- 对于以 'g' 或 'G' 格式化的浮点数值来说,是限定小数点前后共显示多少个数位
- 对于非数字类型来说,限定最大字段的大小(换句话说就是要使用多少个来自字段内容的字符)
- 对于整数来说,则不允许使用该选项值
"{:.2f}".format(3.1415) #'3.14' "{:.2g}".format(3.1415) #'3.1' "{:.6}".format(3.1415) #'3.1415' "{:.6}".format("i love fishc") #'i love'截取功能限定前6位
type
"{:b}".format(80)
#'1010000'二进制输出
"{:c}".format(80)
#'P'unicode字符输出
"{:d}".format(80)
#'80'十进制
"{:#b}".format(80)
#'0b1010000' 二进制前缀
"{:#o}".format(80)
#'0o120'八进制前缀
"{:.{prec}f}".format(3.1415,prec=2)
#'3.14'
f字符串
>>> year = 2010
>>> f"鱼C工作室成立于 {year} 年"
'鱼C工作室成立于 2010 年'
>>>
>>> f"1+2={1+2}, 2的平方是{2*2},3的立方是{3*3*3}"
'1+2=3, 2的平方是4,3的立方是27'
>>>
>>> "{:010}".format(-520)
>>> f"{-520:010}"
'-000000520'
>>>
>>> "{:,}".format(123456789)
>>> f"{123456789:,}"
'123,456,789'
>>>
>>> "{:.2f}".format(3.1415)
>>> f"{3.1415:.2f}"
'3.14'
f-字符串更简洁。
来源于bilibili-小甲鱼视频学习