一、基本字符串操作
所有标准的序列操作(索引、分片、乘法、判断成员资格、求长度、取最小值和最大值)对字符串同样适用。但是,请记住字符串都是不可变的。
二、字符串格式化:精简版
字符串格式化使用字符串格式化操作符即百分号%来实现。在%的左侧放置一个字符串(格式化字符串),而右侧则放置希望格式化的值。可以使用一个值,如一个字符串或者数字,也可以使用多个值的元组或者字典。
- >>> format = "Hello. %s. %s enough for ya?"
- >>> values = ('world', 'Hot')
- >>> print(format % values)
- Hello. world. Hot enough for ya?
格式化字符串的 %s 部分称为转换说明符(conversion specifier),它们标记了需要插入转换值的位置。
三、字符串格式化:完整版
1. 如果右操作数是元组的话,则其中的每一个元素都会被单独格式化,每个值都需要一个对应的转换说明符。
2. 基本的转换说明符包括以下部分。
(1)%字符:标记转换说明符的开始。
(2)转换标志(可选):- 表示左对齐;+ 表示在转换值之前要加上正负号;“ ”(空白字符)表示正数之前保留空格;0表示转换值若位数不够则用 0 填充。
(3)最小字段宽度(可选):转换后的字符串至少应该具有该值指定的宽度。如果是 *,则宽度会从值元组中读出。
(4)点(.)后跟精度值(可选):如果转换的是实数,精度值表示出现在小数点后的位数。如果转换的是字符串,那么该数字就表示最大字段宽度。如果是*,那么精度就会从元组中读出。
(5)转换类型
3.1 简单转换
简单的转换只需要写出转换类型。
- >>> print(format % values)
- Hello. world. Hot enough for ya?
- >>> 'Price of eggs: $%d' % 42
- 'Price of eggs: $42'
- >>> 'Hexadecimal price of eggs: %x' % 42
- 'Hexadecimal price of eggs: 2a'
字段宽度是转换后的值所保留的最小字符个数,精度(对于数字转换来说)则是结果中应该包含的小数位数,或者(对于字符串转换来说)是转换后的值所能包含的最大字符个数。
这两个参数都是整数(首先是字段宽度,然后是精度),通过点号(.)分隔。虽然两个都是可选的参数,但如果只给出精度,就必须包含点号。
- >>> from math import pi
- >>> '%10f' % pi
- ' 3.141593'
- >>> '%10.2f' % pi
- ' 3.14'
- >>> '%.2f' % pi
- '3.14'
- >>> '%.*s' % (5, 'Guido van Rossum')
- 'Guido'
在字段宽度和精度值之前还可以放置一个“标表”,该标表可以是零、加号、减号或空格。零表示数字将会用 0 进行填充。
- >>> '%010.2f' % pi
- '0000003.14'
- >>> '%-10.2f' % pi
- '3.14 '
空白(“ ”)意味着在正数前加上空格。
- >>> print(('% 5d' % 10) + '\n' + ('% 5d' % -10))
- 10
- -10
加号(+),它表示不管是正数还是负数都标示出符号。
- >>> print(('%+5d' % 10) + '\n' + ('%+5d' % -10))
- +10
- -10
字符串的方法丰富得多,这是因为字符串从 string 模块中“继承”了很多方法。尽管字符串方法完全来源于 string 模块,但是这个模块还包括一些不能作为字符串方法使用的常量和函数。下面是一些有用的字符串常量。
(1) string.digits:包换数字 0 - 9 的字符串
(2) string.letters:包含所有字母(大写和小写)的字符串
(3) string.lowercase:包含所有小写字母的字符串
(4) string.printable:包含所有可打印字符的字符串
(5) string.punctuation:包含所有标点的字符串
(6) string.uppercase:包含所有大写字母的字符串
1. find
find 方法可以在一个较长的字符串中查找子字符串。它返回子串所在位置的最左端索引。如果没有找到则返回 -1。
- >>> 'With no moo-moo here, and a moo-moo there'.find('moo')
- 8
- >>> title = "Monty Python's Flying Circus"
- >>> title.find('Monty')
- 0
- >>> title.find('Python')
- 6
- >>> title.find('Zirquss')
- -1
- >>> subject = '
$Getrichnow!!!$'
- >>> subject.find('$$$')
- 0
- >>> subject.find('$$$', 1)
- 20
- >>> subject.find('!!!')
- 16
- >>> subject.find('!!!', 0, 16)
- -1
2. join
join 方法用来在队列中添加元素。需要添加的队列元素都必须是字符串。
- >>> seq = ['1', '2', '3', '4', '5']
- >>> sep = '+'
- >>> sep.join(seq)
- '1+2+3+4+5'
- >>> dirs = '', 'usr', 'bin', 'env'
- >>> '/'.join(dirs)
- '/usr/bin/env'
3. lower
lower 方法返回字符串的小写字母版。
- >>> 'Trondhe Hammer Dance'.lower()
- 'trondhe hammer dance'
- >>> "that's all folks".title()
- "That'S All Folks"
4. replace
replace 方法返回某字符串的所有匹配项均被替换之后得到的字符串。
- >>> 'This is a test'.replace('is', 'eez')
- 'Theez eez a test'
5. split
split 方法将字符串分割成序列。
- >>> '1+2+3+4+5'.split('+')
- ['1', '2', '3', '4', '5']
- >>> '/usr/bin/env'.split('/')
- ['', 'usr', 'bin', 'env']
- >>> 'Using the default'.split()
- ['Using', 'the', 'default']
6. strip
strip 方法返回去除两侧(不包括内部)空格的字符串。
- >>> ' internal whitespace is kept '.strip()
- 'internal whitespace is kept'
- >>> '*** SPAM * for * everyone!!! ***'.strip(' *!')
- 'SPAM * for * everyone'