Python基础 第三章 使用字符串(3)字符串方法&本章小结
字符串的方法非常之多,重点学习一些最有用的,完整的字符串方法参见《Python基础教程(第三版)》附录B。
模块string,虽然风头已小,但其包含了一些字符串方法中没有的常量和函数,故将模块string中几个非常有用的常量列出:
1 string.digits: 包含数字0-9的字符串; 2 string.ascii_letters: 包含所有ASCII字母(大写和小写)的字符串; 3 string.ascii_lowercase: 包含所有小写ASCII字母的字符串; 4 string.printable: 包含所有可打印的ASCII字符的字符串; 5 string.punctuation: 包含所有ASCII标点字符的字符串; 6 string.ascii_uppercase: 包含所有大写ASCII字符的字符串。 7 8 # 虽然说的是ASCII字符,但实际上是未解码的Unicode字符串。
1. center
方法center通过在两边填充字符(默认空格)让字符居中。
其中数字参数为整个字符串的长度,包含填充符合。
1 center = "The Middle by Jimmy Eat World".center(39) 2 print(center) 3 结果: 4 The Middle by Jimmy Eat World 5 6 center = "The Middle by Jimmy Eat World".center(39, "*") 7 print(center) 8 结果: 9 *****The Middle by Jimmy Eat World*****
2. find
方法find在字符串中查找子串。如果找到,就返回子串的第一个字符的索引,否则返回-1.
1 findstr = 'wiht a moo-moo here, and a moo-moo there' 2 print(findstr.find('moo')) 3 结果:7 4 5 title = "Monty Python's Flying Cirus" 6 print(title.find('Monty')) 7 结果:0 8 9 print(title.find('Python')) 10 结果:6 11 12 print(title.find('Flying')) 13 结果:15 14 15 print(title.find('Zirq')) 16 结果:-1
可指定搜索的起点和终点(第二个和第三个参数)
1 subject = '$$$ Get rich now!!! $$$' 2 print(subject.find('$$$')) 3 # 只指定了起点 4 print(subject.find('$$$', 1)) 5 结果: 6 0 7 20
起点和终点指定的搜索范围包含起点,但不包含终点(Python的惯常做法)。
1 subject = '$$$ Get rich now!!! $$$' 2 3 print(subject.find('!!!')) 4 # 同时指定了起点和终点 5 print(subject.find('!!!', 0, 16)) 6 结果: 7 16 8 -1
3. join (非常重要的字符串方法)
用于合并序列的元素,其作用与split相反。所合并序列的元素必须都是字符串。
1 seq = ['1','2','3','4'] 2 str = '+' 3 # 合并一个字符串列表,所合并列的元素都必须是字符串 4 print(str.join(seq)) 5 结果: 6 1+2+3+4
1 dirs = '','usr','bin','env' 2 print(dirs) 3 print('/'.join(dirs)) 4 print('C:' + '\\'.join(dirs)) 5 结果: 6 ('', 'usr', 'bin', 'env') 7 /usr/bin/env 8 C:\usr\bin\env
4. lower - 该方法用于返回字符串的小写版本
1 print('Tron Hamm Dance'.lower()) 2 结果: 3 tron hamm dance
1 name = 'Gumby' 2 names = ['gumby','smith','jones'] 3 if name.lower() in names: 4 print('Found it!') 5 6 结果: 7 Found it!
5. replace - 该方法用于将指定子串都替换为另一个字符串,并返回替换后的结果
1 newstr = 'This is a test'.replace('is', 'eez') 2 print(newstr) 3 结果: 4 Theez eez a test
6. split(非常重要的字符串方法)
用于将字符串分拆为序列,其作用与join相反。
如果没有指定分隔符,将默认在单个或多个连续的空白字符(空格、制表符、换行符等)进行拆分。
1 print('1+2+3+4'.split('+')) 2 # 如果没有指定分隔符,将默认在单个或多个连续的空白字符(空格、制表符、换行符等)进行拆分 3 print('Using hte default'.split())
4 结果:
5 ['1', '2', '3', '4']
6 ['Using', 'hte', 'default']
7. strip - 该方法将字符串开头和末尾的空白(但不包括中间的空白)删除,并返回删除后的结果。
1 str = ' internal whitespace is kept '.strip() 2 print(str) 3 结果 : 4 internal whitespace is kept
还可在一个字符串参数中指定要删除哪些字符(同样只删除开头和末尾的指定字符)
1 str = '*** SPAM * for * everyone!!! ***' 2 print(str.strip(' *!')) 3 结果: 4 SPAM * for * everyone
8. translate
方法translate与replace一样替换字符串的特定部分,但translate的优势在于能同时替换多个字符,效率更高。
使用translate前必须创建一个转换表(该表指出了不同Unicode码点之间的转换关系),对字符串类型str调用方法maketrans创建该转换表,这个方法接受两个参数(两个长度相同的字符串)。
1 table = str.maketrans('cs', 'kz') 2 # 查看转换表内容 3 print("转换表内容:") 4 print(table) 5 sen = 'this is an incredible test' 6 print("替换结果:") 7 print(sen.translate(table)) 8 9 >>> 10 转换表内容: 11 {99: 107, 115: 122} 12 替换结果: 13 thiz iz an inkredible tezt
调用maketrans时,还可提供可选的第三个参数,指定要将哪些字母删除。
1 table = str.maketrans('cs', 'kz',' ') 2 # 查看转换表内容 3 print("转换表内容:") 4 print(table) 5 sen = 'this is an incredible test' 6 print("替换结果:") 7 print(sen.translate(table)) 8 9 结果: 10 转换表内容: 11 {99: 107, 115: 122, 32: None} 12 替换结果: 13 thizizaninkredibletezt
9. 判断字符串是否满足特定条件
以is打头的字符串方法,如isspace、isdigit和isupper,他们判断字符串是否具有特定性值,如果具备则返回True,否则返回False。
10. 本章小结
10.1 关键词:字符串格式设置、字符串方法。
10.2 本章新函数
1 string.capwords(s[, sep]) #使用split根据sep拆分s,将每项的首字母大写,再以空格为分隔符将他们合并起来 2 3 ascii(obj) #创建指定对下的ASCII表示