一、字符串基础
-
单引号和双引号都可以表示字符串
str1='ABCDEFG' str2="ABCDEFG"
-
当句子本身有单引号时,外面用双引号
print("It's OK") print("He said:"Hello."")#会报错
-
当句子本身有双引号时,外面用单引号
print('He said:"Hello."')
-
Python 中三引号可以将复杂的字符串进行赋值。
Python 三引号允许一个字符串跨多行,字符串中可以包含换行符、制表符以及其他特殊字符。
print('''春花秋月何时了
往事知多少
小楼昨夜又东风
故国不堪回首月明中
''')
运行结果如下:
春花秋月何时了
往事知多少
小楼昨夜又东风
故国不堪回首月明中
Process finished with exit code 0
二、字符串的操作
-
拼接字符串
-
使用"+"可以对多个字符串进行拼接并产生一个字符串对象
print('a'+'b') print(1+1) #数字和数字之间可以进行算术运算 print('1'+'1') #字符串之间进行的是拼接,而不是算术运算 print('a'+str(1)) #str()函数将参数转换为str型 print(1+int('1')) #int()函数将参数转换为int型 print(1+float('1.2')) #flat()函数将参数转换为float型 print('a'*9) #字符串可以和数字n相乘,表示打印n次
运行结果如下:
ab 2 11 a1 2 2.2 aaaaaaaaa Process finished with exit code 0
-
字符串不允许直接与其他类型的数据拼接
print('1'+1) #字符串和数字不能拼接,会报错
运行结果如下:
Traceback (most recent call last): File "E:/PC/untitled/练习/test.py", line 105, in <module> print('1'+1) #字符串和数字不能拼接,会报错 TypeError: can only concatenate str (not "int") to str Process finished with exit code 1
-
使用join()方法
使用join()方法 对各种数据类型中元的素进行合并拼接
“连接符”.join(列表或元组或字符串或字典)
-
返回的是一个使用连接符进行拼接的字符串
-
如果对象是列表,元组,就是以一个下标元素为单位进行拼接
-
如果对象是字符串,就是一个单词元素为单位进行拼接
-
如果对象是字典,就是以一个键为单位进行拼接
列表:
str1='你好' a = ["123", "123"] print(str1.join(a))
运行结果如下:
123你好123 Process finished with exit code 0
字典:
str1='你好' a = {"name":"张三","age":20} print(str1.join(a))
运行结果如下:
name你好age Process finished with exit code 0
元组:
str1='你好' a = ("张三","李四","王五") print(str1.join(a)) print("".join(a))
运行结果如下:
张三你好李四你好王五 张三李四王五 Process finished with exit code 0
字符串:
str1='你好张三' a = 'abc' print(a.join(str1)) print('+'.join(str1))
运行结果如下:
你abc好abc张abc三 你+好+张+三 Process finished with exit code 0
-
-
Python转义字符
#转义符 \n 换行符,\t 横向制表符,\v 纵向制表符,\r 回车,\f 换页 # print('c:\note1.txt') #这样打印的结果不符合预期 #解决方案 1 # print('c:\\note1.txt') #在\前面再加一个\,表示后面的\没有特殊含义 #解决方案 2 # print(r'c:\note1.txt') #在字符串的外面加一个r,表示后面的字符串不使用转义符 #解决方案 3 # print('c:/note1.txt') #在python中,/也可以表示路径
运行结果:
c: ote1.txt c:\note1.txt c:\note1.txt c:/note1.txt Process finished with exit code 0
-
-
字符串的长度
-
在Python中,数字、英文、小数点、下划线和空格各占一个字节
-
一个汉字所占字节由采用的编码决定;在GBK/GB2312编码中占2个字节;在UTF-8/unicode编码中占用3个字节(或4个字节)
Python默认的UTF-8编码下:
str1 = "人生苦短,我学Python!" #len(string)计算字符串的长度 print(len(str1)) #14 length=len(str1.encode()) #计算UTF-8编码的字符串的长度 print(length) #28
使用GBK编码的长度:
str1 = "人生苦短,我学Python!" length=len(str1.encode('gbk'))#计算GBK编码的字符串的长度 print(length) #21
-
-
截取字符串
- 字符串的下标
str2='ABCDEFG'
# print(str2[2]) #python中的下标,是从0开始算起
#字符串属于不可变对象,不能修改其中的值
# str2[2]='G' #这样会报错
#打印最后一位,可以用负数下标
# print(str2[-3]) #打印倒数第三位
# print(str2[100]) #下标的值如果超过了切片的最大长度,则会报错
-
字符串的切片
string[start🔚step]
参数说明:
string:表示要截取的字符串
start:表示要截取的第一个字符的索引(包含该字符),默认值为0
end:表示要截取的最后一个字符的索引(不包含该字符),默认为字符串的长度
step:表示切片的步长,如果省略,默认为1。当步长省略时,最后一个冒号也可以省略
#切片的基础写法[起始值:终止值],包含起始值,不包含终止值 str2='ABCDEFG' # print(str2[2:4]) #取到的是CD # print(str2[4:100]) #当切片的终止值超过了切片的长度时,就会从起始值开始,将剩余的值全部取得 # print(str2[4:]) #终止值不写时,也表示从开始值往后全取 # print(str2[:]) #起始值和终止值都不写时,表示全取 #切片可以加上步长,写法[起始值:终止值:步长],当不写步长时,步长默认为1,当步长为负数时,表示倒着取值 # print(str2[::2]) #ACEG # print(str2[::-1]) #GFEDCBA #print(str2[7::-1]) #如果起始值大于终止值,那么步长必须为负数才能取到值
-
切割字符串
str.split(sep,maxsplit) 把字符串分割成列表
参数说明:
返回值:分割后的字符串列表
str:要进行切割的字符串
sep:用于指定的分割符,可以包含多个字符,默认是None,即所有空字符(包含空格、换行"\n"、制表符"\t"等)。
maxsplit:可选参数,用于指定分割的次数,如果不指定或者为-1,则分割次数无限制,否则返回结果列表的元素个数最多为maxsplit+1。
str1="百 度 网 站 官 网 >>> www.baidu.com" print("原字符串:",str1) list1=str1.split() #使用默认分隔符进行分割 list2=str1.split('>>>') #使用多个字符符进行分割 list3=str1.split('.') #使用"."浩进行分割 list4=str1.split(' ',4) #使用空格进行分割,只分割前4个 list5=str1.split('>') #使用>进行分割 print(str(list1)+'\n'+str(list2)+'\n'+str(list3)+'\n'+str(list4)+'\n'+str(list5))
运行结果如下:
原字符串: 百 度 网 站 官 网 >>> www.baidu.com ['百', '度', '网', '站', '官', '网', '>>>', 'www.baidu.com'] ['百 度 网 站 官 网 ', ' www.baidu.com'] ['百 度 网 站 官 网 >>> www', 'baidu', 'com'] ['百', '度', '网', '站', '官 网 >>> www.baidu.com'] ['百 度 网 站 官 网 ', '', '', ' www.baidu.com']
-
检索字符串
-
count()方法用于检索指定字符串在另一个字符串中出现的次数。如果检索的字符串不存在,返回0,否则返回出现的次数。
语法如下:
str.count(sub[, start[, end]])
sub:表示要检索的子字符串
start:可选参数,表示检索范围的起始位置索引,如果不指定,则从头开始
end:可选参数,表示检索范围的结束位置索引,如果不指定,则检索到结尾
str1="百 度 网 站 官 网 >>> www.baidu.com" print(str1.count('>>>')) #1 print(str1.count(' ')) #9 print(str1.count('com')) #1
-
find()方法
该方法用于检索是否包含指定的子字符串。如果检索的字符串不存在,则返回-1,否则返回首次出现该字符串时的索引。
str.find(sub[, start[, end]])
参数说明:
sub:表示要检索的子字符串
start:可选参数,表示检索范围的起始位置索引,如果不指定,则从头开始
end:可选参数,表示检索范围的结束位置索引,如果不指定,则检索到结尾
str1="百度网站官网>>>www.baidu.com" print(str1.find(' ')) #-1 print(str1.find('com')) #19
如果只判断字符串是否存在,可以使用in关键字实现。
或者根据find()方法返回的值是否大于-1来确定是否存在。
-
rfind()方法 返回字符串最后一次出现的位置(返回在字符串中找到子字符串sub的最高索引),如果没有匹配项则返回-1。
str = "this is really a string example....wow!!!"; substr = "is"; print(str.rfind(substr)) print(str.rfind(substr, 0, 10)) print(str.rfind(substr, 10, 0))
运行结果如下:
5 5 -1 Process finished with exit code 0
-
index()方法
str.index(sub[, start[, end]])
index()方法与find()类似,只不过当指定检索的字符串不存在时,会抛出异常。
-
rindex()方法
str.rindex(sub[, start[, end]])
与rfind()方法类似
rindex() 返回子字符串 str 在字符串中最后出现的位置,如果没有匹配的字符串会报异常
-
-
字符串去空格
-
strip()方法
用于去掉字符串左、右两边的空格和特殊字符
str.strip(chars)
参数说明:
chars:可选参数,用于指定要去除的字符,如果不指定时,默认去除空格、制表符\t、回车符\r、换行符\n等。
str3=' A B C D E F G ' \ 'H' print(str3.strip()) str3_1='*******ABCD***EFG*********' print(str3_1.strip('*'))
运行结果如下:
A B C D E F G H ABCD***EFG Process finished with exit code 0
-
lstrip()方法
用于去除字符串左侧的空格和特殊字符,用法于strip()方法类似。
-
rstrip()方法
用于去除字符串右侧的空格和特殊字符,用法于strip()方法类似。
-
-
字符串替换
replace()方法
语法如下:
str.replace(old,new[,max])
参数:
old:被替换的子字符串
new:新字符串,用于 替换old子字符串。
max:可选参数,替换的个数。不指定时默认全部替换(-1表示替换全部)
str = "this is str is ng is example....wow!!!" print (str.replace("is", "was")) print (str.replace("is", "was", 3)) print (str.replace("is", "was", -1))
运行结果如下:
thwas was str was ng was example....wow!!! thwas was str was ng is example....wow!!! thwas was str was ng was example....wow!!! Process finished with exit code 0
三、Python字符串中内置函数
方法 | 描述 |
---|---|
string.capitalize() | 把字符串的第一个字符大写 |
string.endswith(obj, beg=0, end=len(string)) | 检查字符串是否以 obj 结束,如果beg 或者 end 指定则检查指定的范围内是否以 obj 结束,如果是,返回 True,否则返回 False. |
string.isalnum() | isalnum() 方法检测字符串是否由字母和数字组成。 |
string.isalpha() | 方法检测字符串是否只由字母或文字组成。 |
string.isdecimal() | 检查字符串是否只包含十进制字符。这种方法只存在于unicode对象。 |
string.isdigit() | 检查字符串是否只包含数字则返回 True 否则返回 False. |
string.islower() | 检测字符串是否由小写字母组成 |
string.isspace() | 检测字符串中只包含空格,是则返回 True,否则返回 False |
string.isupper() | 检测字符串中所有的字母是否都为大写。 |
string.lower() | 转换字符串中所有大写字符为小写. |
max(str) | 返回字符串 str 中最大的字母. |
min(str) | 返回字符串 str 中最小的字母。 |
string.startswith(obj, beg=0,end=len(string)) | 检查字符串是否是以 obj 开头,是则返回 True,否则返回 False。如果beg 和 end 指定值,则在指定范围内检查. |
string.swapcase() | 翻转字符串中的大小写. |
string.upper() | 转换字符串中的小写字母为大写. |