6. 字符串详解

127 阅读7分钟

本节会详解字符串格式化和对象方法两部分

一,概念理解

字符串格式化:在实际应用中,总会有涉及到将非字符串的元素格式化成字符串或者将字符串格式化成非字符串的元素,这就涉及到一系列格式化的操作。就如同将jpg格式的图片转换成png格式的类似 对象方法:对于字符串格式的数据,为了便于对这种类型的数据进行各种操作,python有许多针对字符串类型数据的操作方法,称为对象方法。可理解为对字符串对象操作的方法

二,字符串格式化

1,%格式化符号(只列举常见如下)

  • %s :格式化为字符串
  • %d:格式化为十进制整数
  • %f:格式化为浮点数
  • %o:格式化为八进制数
  • %x:格式化为十六进制数
  • %e:格式化为科学计数法表示

使用方法: 将某一字符串中需要格式化的元素替换为对应的格式化符号,然后在整个字符串的后面接 % 具体内容

演示如下:

print("他说他叫%s, 已经练习%d年, 每天睡%f小时!" % ("鸡哥", 2.5, 8.5))

输出为

他说他叫鸡哥, 已经练习2年, 每天睡8.500000小时!

2,format格式化函数

使用方法1:类似%格式化符号,将某一字符串中需要格式化的元素替换为{},然后在整个字符串的后面接 .format(具体内容)

演示如下:

a = "他说他叫{}, 已经练习{}年, 每天睡{}小时!".format("鸡哥", 2.5, 8.5)
print(a)

输出为

他说他叫鸡哥, 已经练习2.5年, 每天睡8.5小时!

使用方法2: 如上会默认按从左至右的方法来进行填充字符串,也可以通过顺序索引和关键字的方式来赋值,如下:

a = "他说他叫{0}, 已经练习{2}年, 每天睡{1}小时!".format("鸡哥", 2.5, 8.5)
print(a)
b = "他说他叫{name}, 已经练习{age}年, 每天睡{hour}小时!".format(name="鸡哥", hour=2.5, age=8.5)
print(b)

输出为

他说他叫鸡哥, 已经练习8.5年, 每天睡2.5小时!
他说他叫鸡哥, 已经练习8.5年, 每天睡2.5小时!

使用方法3(扩展):加冒号:后面接b、d、o、x分别输出二进制、十进制、八进制、十六进制数字

print('{:.2f}'.format(3.141592653))
print('{:b}'.format(3))

输出为

3.14
11

3,f-string

使用方法1:在要格式化的整个字符串的前面加f,然后在字符串里面要格式化的元素部分直接用**{替换内容},替换内容可直接填变量名/表达式/函数方法调用**

name="chick"
hour=2.5
age=8.5

print(f'他说他叫{name}, 已经练习{age}年, 每天睡{hour}小时!')
print(f'他说他叫{name}, 已经练习{2+2}年, 每天睡{hour}小时!')
print(f'他说他叫{name.upper()}, 已经练习{age}年, 每天睡{hour}小时!')

输出为

他说他叫chick, 已经练习8.5年, 每天睡2.5小时!
他说他叫chick, 已经练习4年, 每天睡2.5小时!
他说他叫CHICK, 已经练习8.5年, 每天睡2.5小时!

使用方法2(扩展):加冒号:后面接b、d、o、x分别输出二进制、十进制、八进制、十六进制数字

age=8
print(f'{age:b}')

输出为

1000

三,字符串对象方法

1,替换&修改

(1)str.replace(old, new[, count])

作用:用new传入的新字符串替换old传入的旧字符串并返回;count代表替换的次数,默认为-1代表全部替换,注意是从左往右替换

s = "Line1 Line2 Line3"

s1 = s.replace("Li", "b")
s2 = s.replace("Li", "b", 2)

print(s1)
print(s2)

输出为

bne1 bne2 bne4
bne1 bne2 Line4

(2)str.capitalize()

将字符串的首字母变成大写,其他字母变小写,并返回

str1 = "hello world"
print(str1.capitalize())

输出为

Hello world

(3)str.title()

将字符串中所有单词的首字母变成大写,其他字母变小写,并返回

str1 = "hello world"
print(str1.title())

输出为

Hello World

(4)str.upper()

将字符串中所有字符变成大写,并返回

str1 = "hello world"
print(str1.upper())

输出为

HELLO WORLD

(5)str.lower()

将字符串中所有字符变成小写,并返回

str1 = "HELLO WORLD"
print(str1.lower())

输出为

hello world

(6)str.swapcase()

将字符串中所有大写字符变成小写,小写变成大写,并返回

str1 = "Hello World"
print(str1.swapcase())

输出为

hELLO wORLD

2,删除

(1)str.strip([chars])

作用:从字符串的左右两侧各自第一个开始找指定的字符chars,没找到则这一侧停止,找到则将其删除找下一个

s1 = "Line1 Line2 Line3"
s2 = "Line1 Line2 LinLL"

print(s1.strip('L'))
print(s2.strip('L'))

输出为

ine1 Line2 Line3
ine1 Line2 Line

(2)str.lstrip([chars]) 、str.rstrip([chars])

同理,只不过一个是从左边删除,一个从右边删除而已

3,填充

(1)str.center(width[, fillchar])

作用:以作用的字符串为中心,在左右两侧填充fillchar传入字符至width长度,然后返回;原字符串为奇数,左边填充更少;为偶数,左边填充更多

str1 = "hello "
print(str1.center(11, "F"))

输出为

FFFhello FF

(2)str.ljust(width[, fillchar])

作用:在作用的字符串的右侧填充fillchar传入字符至width长度,然后返回;

str1 = "hello "
print(str1.ljust(11, "F"))

输出为

hello FFFFF

(3)str.rjust(width[, fillchar])

同(2),只是在作用的字符串的左侧填充

(4)str.join(iterable)

作用:将可迭代对象iterable中的元素以作用的字符串连接,再返回新的字符串

a = '-'
str1 = "hello "
print(a.join(str1))

输出为

h-e-l-l-o- -w-o-r-l-d

扩展:什么是可迭代对象? 是指包含一系列元素能够被迭代的对象。迭代是指重复执行某个过程,直到达到某个条件为止,可以按照一定的顺序逐个访问这些元素。如常见的for循环遍历

4,拆分

(1)str.partition(sep)

作用:在 sep 首次出现的位置拆分字符串,返回一个包含三个元素的元组,元素分别是分隔符之前的部分、分隔符本身,以及分隔符之后的部分。 如果分隔符未找到,则返回的元组包含原字符串本身以及两个空字符串。

str1 = "hello world"
print(str1.partition("l"))
print(str1.partition("hd"))

输出为

('he', 'l', 'lo world')
('hello world', '', '')

(2)str.rpartition(sep)

同(1),只不过是从最后一次出现的位置拆分,其他一样。

(3)str.split(sep=None, maxsplit=-1)

作用:通过传入的sep为分隔符,对字符串进行分割,以字符串列表的形式返回(结果不包含分隔符本身);maxsplit为最大分隔次数,默认为-1,即分隔所有,例设1时,即代表只分割1次

str1 = "hello world"
print(str1.split('o'))

输出为

['hell', ' w', 'rld']

(4)str.rsplit(sep=None, maxsplit=-1)

同(3),只不过从右边开始分割,在maxsplit没有设置的时候和split没区别

5,查找字符

(1)str.startswith(prefix[, start[, end]])

作用:如果字符串以指定的 prefix 开始,返回 True,否则返回False;如果有可选项 start,将从所指定位置开始检查; 如果有可选项 end,将在所指定位置停止比较

str1 = "hello world"
print(str1.startswith("h"))
print(str1.startswith(" w", 5, 8))

输出为

True
True

(2)str.endswith(prefix[, start[, end]])

同理,只是查是否已传入的prefix结束

(3)str.isalnum()

如果字符串中的所有字符都是字母、文字或数字,则返回 True,否则为 False

(4)str.isalpha()

如果字符串中的所有字符都是字母、文字,则返回True,否则为 False

(5)str.isdigit()

如果字符串中的所有字符都是数字,则返回 True,否则为 False

(6)str.isspace()

如果字符串中只有空白符(空格、换行符、制表符等),则返回 True,否则为 False

(7)str.count(sub, start, end)

返回子字符串sub在从索引start到end结束的字符串中出现的非重叠的次数(默认全局搜索)

(8)str.find(sub[, start[, end]])

返回从左开始第一次找到指定子字符串时的索引,找不到就返回 -1

(9)str.rfind(sub[, start[, end]])

返回从右开始第一次找到指定子字符串时的索引,找不到就返回 -1

(10)str.index(sub[, start[, end]])

类似于find(),唯一不同在于,找不到就会报错,其他都一样

(11)str.rindex(sub[, start[, end]])

类似于rfind(),唯一不同在于,找不到就会报错,其他都一样