前言
这节课我们回过头来,再谈一下字符串,或许我们现在再来谈字符串,有些朋友可能觉得没必要了,甚至有些朋友就会觉得,不就是字符串吗,哥闭着眼也能写出来,那其实关于字符串还有很多你不知道的秘密哦。由于字符串在日常生活中是如此的常见,因此小甲鱼抱着负责任的态度,在这节课上,把所有知道的东西都倒出来跟大家分享下。 无论说你是之前学过了也好,再怎么熟悉也好,因为我们字符串有非常多的方法,而且很多方法都是比较奇葩的,而且这些方法在Python2.x 与Python3.x中都略有差别。,所以大家可以把这节课当作一次复习。
我们学习的列表和元组,都支持分片操作,事实上我们的字符串也是支持的,例如:
>>> str1 =
'i love fishc.com'
>>>
>>> str1[:
6]
'i love'
下面谈一下python各种奇葩的字符串内置方法:
知识点
方法定义举例
capitalize()把字符串的第一个字符改为大写>>> str2 = 'xiaoxie'str2.capitalize() 'Xiaoxie'casefold()把整个字符串的所有字符都改为小写>>> str2 = 'XiAoXie'>>> str2.casefold()'xiaoxie'center(width)将字符串居中,并使用空格填充至长度width的新字符串>>> str2 = 'ju Zhong'>>> str2.center(18) ' ju Zhong 'ljust(width)返回一个左对齐的字符串,并使用空格填充至长度为width的新字符串>>> str2 = '小鲫鱼'>>> str2.ljust(5)'小鲫鱼 'rjust(width)返回一个右对齐的字符串,并使用空格填充至长度为width的新字符串。>>> str2 = 'kongge'>>> str2.rjust(10) ' kongge'zfill(width)返回长度为width的字符串,原字符串右对齐,前边用0填充。>>> str2 = 'fsfas12123sfsfsfsf'>>> str2.zfill(5)'fsfas12123sfsfsfsf'>>> str2.zfill(50)'00000000000000000000000000000000fsfas12123sfsfsfsf'count(sub[,start[,end]])返回sub在字符串里出现的次数,start和end参数表示范围,可选。>>> str2 = 'fswfff'>>> str2.count('f') 4>>> str2.count('f',3,5)2encode(encoding=’utf8’,errors=’strict’)以encoding指定的编码格式对字符串进行编码。encoding – 要使用的编码,如”UTF-8”。errors – 设置不同错误的处理方案。默认为 ‘strict’,意为编码错误引起一个UnicodeError。 其他可能得值有 ‘ignore’, ‘replace’, ‘xmlcharrefreplace’, ‘backslashreplace’ 以及通过 codecs.register_error() 注册的任何值。>>> str ='编码'>>> str_utf8 = str.encode('UTF8')>>> str_gbk = str.encode('GBK')>>> print(str)编码>>> print(str_utf8)b'\xe7\xbc\x96\xe7\xa0\x81'>>> print(str_gbk)b'\xb1\xe0\xc2\xeb'>>> print(str_utf8.decode('utf8'))编码>>> print(str_gbk.decode('gbk'))编码endswith(sub[,start[,end]])检查字符串是否以sub字符串结束,如果是返回True,否则返回False。start和end参数表示范围,可选。>>> str2 = '我爱你我'>>> str2.endswith('我')True>>> str2.endswith('我',1,3)False>>> str2.endswith('我',1,4)Trueexpandtabs([tabsize=8])把字符串中的tab符号(\t)转换为空格,如不指定参数,默认的空格数是tabsize=8>>> str2 = 'geck f'>>> str2.expandtabs()'geck f'>>> temp = len(str2.expandtabs())>>> temp9>>> len(str2)6>>> str2.expandtabs(40)'geck f'>>> len(str2.expandtabs(40))41isalpha()如果字符串至少有一个字符并且所有字符都是字母则返回True,否则返回False>>> str2 = 'fsfs'>>> str2.isalpha()Trueisalnum()如果字符串至少有一个字符并且所有字符都是字幕或数字则返回True,否则返回False。`>>> str2 = 'fsaa'>>> str2.isalnum()True>>> str2 = 'fs1'>>> str2.isalnum()True>>> str2 = '1.3'>>> str2.isalnum()False>>> str2 = ' '>>> str2.isalnum()False>>> str2 = '+'>>> str2.isalnum()Falseisdecimal()如果字符串只包含十进制数据则返回True,否则返回False>>> str2 = '123456'>>> str2.isdecimal()True>>> str2 = '123456f'>>> str2.isdecimal()False>>> str2 = '123.456'>>> str2.isdecimal()Falseisdigit()如果字符串只包含数字则返回True,否则返回False。>>> str2 = '111111'>>> str2.isdigit()Trueisnumeric()如果字符串中只包含数字字符,则返回True,否则返回False。>>> str2 = '13Ⅳ'>>> str2.isnumeric()True>>> str2 = '四'>>> str2.isnumeric()Trueislower()如果字符串至少包含一个区分大小写的字符,并且这些字符都是小写,则返回True,否则返回False。>>> str2 = '12fsfs'>>> str2.islower()Trueisupper()如果字符串中至少包含一个区分大小写的字符,并且这些字符都是大写,则返回True,否则返回False。>>> str2 = '1F'>>> str2.isupper()True>>> str2 = '1Fs'>>> str2.isupper()Falselower()转换字符串中所有大写字符为小写>>> str2 = 'FFSA小甲鱼11'>>> str2.lower()'ffsa小甲鱼11'upper()转换字符串中的所有小写字符为大写>>> str2 = 'fsfas12123sfsfsfsf'>>> str2.upper()'FSFAS12123SFSFSFSF'swapcase()翻转字符串中的大小写>>> str2 = 'fISH lOVE'>>> str2.swapcase()'Fish Love'lstrip()去掉字符串左边的所有空格。>>> str2 = ' f s fs'>>> str2.lstrip()'f s fs'rstrip()删除字符串末尾的空格。>>> str2 = ' fsfs '>>> str2.rstrip()' fsfs'strip([chars])删除字符串前边和后边所有的空格,chars参数可以定制删除的字符,可选。>>> str2 = ' w a n b x i n'>>> str2.strip()'w a n b x i n'>>> str2.strip('n')' w a n b x i '>>> str2.strip('w')' w a n b x i n'>>> str2.strip(' w')'a n b x i n'isspace()如果字符串中只包含空格,则返回True,否则返回False。>>> str2 = 'xiaoxie'>>> str2.xxx >>> str2 = ' '>>> str2.isspace()Truetitle()返回标题化(所有单词都是以大写开始,其余字母均小写)的字符串>>> str2 = 'fish love'>>> str2.title()'Fish Love'istitle()如果字符串中是标题化(所有的单词都是大写开始,其余字母均小写),则返回True,否则False。>>> str2 = 'xiaoxie'>>> str2 = 'Feng Zhong'>>> str2.istitle()Truepartition(sub)找到字符串sub,把字符串分成一个3元组(pre_sub,sub,fol_sub),如果字符串中不包含sub则返回(‘原字符串’,”,”)>>> str2 = 'partition'>>> str2.partition('pa')('', 'pa', 'rtition')>>> str2.partition('ti')('par', 'ti', 'tion')>>> str2.partition('fs')('partition', '', '')rpartition(sub)类似于partition()方法,不过是从右边开始查找。>>> str2 = 'partition'>>> str2.rpartition('fs')('', '', 'partition')replace(old,new[,count])把字符串中的old字符串替换成new字符串,如果count指定,则替换不超过count次>>> str2 = '1f2f3f4f5f'>>> str2.replace('f','d')'1d2d3d4d5d'>>> str2.replace('f','d',2)'1d2d3f4f5f'find(sub[,start[,end]])检测sub是否包含在字符串中,如果有则返回索引值,否则返回-1,start和end参数表示范围,可选。>>> str2 = '感谢小甲鱼'>>> str2.find('小')2>>> str2.find('小',3,5)-1rfind(sub[,start[,end]])类似于find()方法,不过是从右边开始查找。>>> str2 ='1a2b3c4d5b'>>> str2.rfind('b')9index(sub[,start[,end]])与find方法一样,但是如果sub不在sring中会产生一个异常。>>> str2.index('小')2>>> str2.index('小m')Traceback (most recent call last):File "<pyshell#68>", line 1, in <module>str2.index('小m')ValueError: substring not foundrindex(sub[,start[,end]])类似于index()方法,不过是从右边开始查找。>>> str2 ='1a2b3c4d5b'>>> str2.rindex('b')9join(sub)以字符串作为分隔符,插入到sub中所有的字符之间。>>> str2 = '小甲鱼'>>> str2.join('12345')'1小甲鱼2小甲鱼3小甲鱼4小甲鱼5'split(sep=None,maxsplit=-1)不带参数默认以空格为分隔符切片字符串,如果maxsplit参数有设置,则仅分隔maxsplit个字符串,返回切片后的字符串拼接的列表。>>> str = 'i love fishc'>>> str.split()['i', 'love', 'fishc']>>> str.split('l',2)['i ', 'ove fishc']splitlines([keepends])Python splitlines() 按照行(‘\r’, ‘\r\n’, \n’)分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。>>> str2 = 'ab c\n\nde fg\rkl\r\n'>>> str2.splitlines()['ab c', '', 'de fg', 'kl']>>> str2.splitlines(False)['ab c', '', 'de fg', 'kl']>>> str2.splitlines(True)['ab c\n', '\n', 'de fg\r', 'kl\r\n']startswith(prefix[,start[,end]])检查字符串是否以prefix开头,是则返回True,否则返回False。start和end参数可以指定范围检查,可选。>>> str2 = 'qanfin'>>> str2.startswith('q')True>>> str2.startswith('f',3)Truetranslade(table)根据table的规则(可以由str.maketrans(‘a’,’b’)定制)转换字符串中的字符。>>> str2 = 'fsfas12123sfsfsfsf'>>> str2.translate(str.maketrans('f','b'))'bsbas12123sbsbsbsb'
课后习题
测试题
如何定义一个跨越多行的字符串吗?(请至少写出两种实现的方法)?
方法一:
>>> str1=
'''床前明月光,
疑是地上霜,
举头望明月,
低头思故乡。'''
方法二:
>>> str1=
'床前明月光,\
疑是地上霜,\
举头望明月,\
低头思故乡。'
方法三:
>>> str1=(
'床前明月光,'
'疑是地上霜,'
'举头望明月,'
'低头思故乡。')
三引号字符串通常我们用于做什么使用?
三引号字符串不赋值的情况下,通常当作跨行注释使用,例如:
'''这是一个三引号字符串用于注释的例子,
例子虽然只是简简单单的一句话,
却毫无遮掩地体现了作者用情至深,
所谓爱至深处情至简!'''
print(
"I love FishC.com!")
================== RESTART: C:/Users/ThinkPad/Desktop/
5.py ==================
I love FishC.com!
file1 = open('C:\Windows\Temp\readme.txt','r')表示只读方式打开C:\windows\temp\readme.txt这个文本文件,但事实上这个语句会报错,知道为什么吗?你会如何修改?
>>> file1 =
open(
'C:\Windows\Temp\readme.txt',
'r')
Traceback (most recent call
last):
File
"<pyshell#0>",
line 1,
in <module>
file1 =
open(
'C:\Windows\Temp\readme.txt',
'r')
OSError: [Errno
22] Invalid argument:
'C:\\Windows\\Temp\readme.txt'
会报错是因为在字符串中,我们约定\t和\r分别表示横向制表符(TAB)和回车符,详见字符串格式化符号含义及转义字符含义,因此并不会按照我们计划的路劲去打开文件。 Python为我们铺好了解决的道路,只需要使用原始字符串操作符(R或r)即可:
file1 = open(
r'C:\Windows\Temp\readme.txt',
'r')
**有字符串:str1 = '<a href="http://www.fishc.com/dvd" target="_blank">鱼C资源打包</a>' ,请问如何提取子字符串:www.fishc.com**
str1[str1.find(
'www.fishc.com')
:str1.find(
'/dvd')]
'www.fishc.com'
如果使用负数作为索引值进行分片操作,按照第三题的要求你能正确目测出结果吗?
>>> str1[-
45:-32]
'www.fishc.com'
还是上题的字符串,请问下边语句会显示什么内容?
>>> str1[
20:-36]
'fishc'
怎么解开此字符串:str1='i2sl54ovvvb4e3bferi32s56h;$c43.sfc67o0cm99'
>>> str1[::
3]
'ilovefishc.com'
动动手
请写一个密码安全性检查的代码:check.py
密码安全性检查代码
低级密码要求: 1. 密码由单纯的数字或字母组成 2. 密码长度小于等于8位
中级密码要求: 1. 密码必须由数字、字母或特殊字符(仅限:~!@#$%^&*()_=-/,.?<>;:[]{}|\)任意两种组合 2. 密码长度不能低于8位
高级密码要求: 1. 密码必须由数字、字母及特殊字符(仅限:~!@#$%^&*()_=-/,.?<>;:[]{}|\)三种组合 2. 密码只能由字母开头 3. 密码长度不能低于16位
symbols =
r'''`!@#$%^&*()_+-=/*{}[]\|'";:/?,.<>'''
chars =
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
nums =
'0123456789'
passwd = input(
'请输入需要检查的密码组合:')
length = len(passwd)
while (passwd.isspace()
or length ==
0):
passwd = input(
"您输入的密码为空(或空格),请重新输入:")
length = len(passwd)
if length <=
8:
flag_len =
1
elif 8< length <
16:
flag_len =
2
else:
flag_len =
3
flag_con =
0
for each
in passwd:
if each
in symbols:
flag_con +=
1
break
for each
in passwd:
if each
in chars:
flag_con +=
1
break
for each
in passwd:
if each
in nums:
flag_con +=
1
break
while 1:
print(
"您的密码安全级别评定为:",end=
'')
if flag_len ==
1 or flag_con ==
1:
print(
"低")
elif flag_len ==
3 and flag_con ==
3 and (passwd[
0]
in chars):
print(
"高")
print(
"请继续保持")
break
else:
print(
"中")
print(
"请按以下方式提升您的密码安全级别:\n\
\t1. 密码必须由数字、字母及特殊字符三种组合\n\
\t2. 密码只能由字母开头\n\
\t3. 密码长度不能低于16位")
break
转载于:https://www.cnblogs.com/wanbin/p/9514697.html
相关资源:小甲鱼零基础入门学习Python(全96集).7z