1.基本字符串操作
所有的标准序列操作对字符串同样适用(索引,分片,判断成员资格,求长度,最大最小值),但是字符串不可变
2.字符串格式化(精简版)
格式化操作符%,格式:字符串%希望格式化的字符串
>>> format = "hello, %s, %s enough for ya?"
>>> values = ('world', 'hot' )
>>> print format % values
hello world, hot enough for ya?
格式化浮点数使用%f, 加上精度 %.3f
string模板字符串 >>>from string import Template
>>> s = Template('$x', glorious $x!') >>>s.substitute(x = 'slurm') 'slurm,glorious slurm!'
替换字段是单词的一部分,那么参数名需要用括号括起来,从而准确指明结尾 >>> s = Template("It's $(x)tastic!")
可以使用$$插入$符号,出关键字参数之外,还可以使用字典变量提供值/名称对
方法safe_substitute不会因缺少值或不正确使用$符号出错
3.字符串格式化:完整版
格式化操作符的右操作数可以是任何东西。(元组,映射-字典)
如果右操作数是元组的话,则其中的每一个元素都会被单独格式化,每个值都需要一个对应的转换说明符。
如果需要转换的元组作为转换表达式的一部分存在,那么必须用圆括号括起来
>>> '%s plus %s equals %s' % (1, 1, 2) '1 plus 1 equals 2'
基本的说明符包括以下部分
a.%字符,标记转换说明符的开始
b.转换标志(可选),-左对齐,+在转换值之前加上正负号,“”(空白字符)表示正数之前保留空格;0表示转换值若位数不够则用0填充
c.最小字段宽度(可选),转换后的字符串至少应该具有该值指定的宽度,如果是*,则宽度会从值元组中读出
d.点(. )后跟精度值(可选),如果转换的是实数,精度值表示出现在小数点后的位数,如果是字符串表示最大字段长度,如果是*,精度从元组中读出
e.转换类型
带符号的十进制整数(d,i), 不带符号的八进制(o),不带符号的十进制(u),不带符号十进制(小写x,大写X)
科学技术法表示浮点数(大写E,小写e),十进制浮点数(f,F),字符串使用repr转换任意对象(r),字符串使用str转换任意对象(s)
g,G,C
3.1简单转换
只需写出转换类型
>>> 'Price of eggs; $%d' %42 'Price of eggs: $42'
3.2字段宽度和精度
字段宽度是转换后的值所保留的最小字符个数,精度是结果中小数位数或能包含的最大字符个数
都是整数,字段宽度 字段宽度.精度 .精度
>>> ' %10f ' % pi 宽度10 ' 3.141593'
>>> ' %10.2f ' % pi 宽度10,精度2 ' 3.14'
>>> ' %.2f ' % pi 精度2 '3.14'
使用星号作为字段宽度或精度,此时数值会从元组参数中读出
>>> ' %.*s' % (5, Guido van Rossum') 'Guido'
3.3符号,对齐和0填充
在字段宽度和精度值之前还可以放置一个"标表",该标表可以是零,加号,减号或空格,0表示数字会用0填充
>>> ' %010.2f ' % pi 宽度10,精度2 '0000003.14'
减号用来左对齐数值 >>> ' % -10.2f ' % pi '3.14 '
空白""意味着在正数前加空格,对齐正负数
>>> print (' %+5d' % 10) + '\n' + ('%+5d' % -10)F
10
-10
4.字符串方法
字符串常量,
string.digits: 包含数字0-9的字符串
string.letters: 保护所有字母的字符串(大小写)
string.lowercase:保护所有小写字母的字符串
string.printable:包含所有可打印字符的字符串
string.punctuation:包含所有标点的字符串
string.uppercase:所有大写字符的字符串
字符串常量string.letters与地区有关,具体值取决于python所配置的语言,如String.ascii_letters
4.1 find
在一个较长的字符串中查找子字符串,返回子串所在位置的最左端索引,没找到返回-1
>>> 'hello, world‘.find('wor') 7 空格也占位,从0开始
>>> title = "hello, world" >>>title.find('wor') 7
可实现成员资格检查功能,并不返回布尔值,返回0表示在索引0位置找到了子串
可以接受起始点和结束点参数,包含起始点不包含结束点
>>> title = "hello, world" >>>title.find('wor', 0, 10) 7
>>> title = "hello, world" >>>title.find('wor', 2) 7 只提供起始点
4.2 join
是split的逆方法,用来在队列中添加元素
>>> seq = ['1', '2', '3' ] >>> sep = '+' >>> sep.join(seq) '1+2+3'
需要添加的队列元素必须是字符串
>>> dirs = ' '. 'usr', 'bin', 'env' >>> '/'.join(dirs) /.usr/bin/env'
>>> print 'C;' + '\\'. join(dirs) C;\usr\bin\env
4.3 lower
返回字符串的小写字母版(可以用在忽略大小写查找情况) 'Gumby'.lower()
4.4 replace
返回某字符串的所有匹配项均被替换之后得到的字符串
>>> 'This is a test'. replace(‘is', 'eez') 'Theez eez a test'
4.5 split
将字符串分割成序列
>>> '1+2+3'.split('+') ['1', '2', '3']
4.6 strip
返回去除两侧(不包括内部)空格的字符串
>>>' internal whitespace is kept '.strip() 'internal whitespace is kept'
和lower方法一起,对比输入的值和存储的值
也可以指定去除的字符,列为参数即可,只可去除两侧的字符
>>> '*** SPAM * for * everyone!!! *** '. strip(' *!') ’SPAM * for * everyone'
4.7 translate
替换字符串中某些部分,值处理单个字符,可以同时进行多个替换
maketrans 函数接受两个参数,两个等长的字符串,表示第一个字符串中的每个字符都用第二个字符串中相同位置的字符替换
>>>from string import maketrans >>>table = maketrans('cs', 'kz')
转换表是包含替换ASCII字符集中256个字符的替换字母的字符串
>>>table = maketrans('cs', 'kz')
>> len(table) 256
>>>table[97: 123] 'abkdefghijklmnopqrztuvwxyz'
>>>maketrans(' ', ' ') [97: 123] 'abcdefghijklmnopqrstuvwxyz'
字符串转换
>>> ' this is an incredible test' . translate(table) 'thiz iz an inkredible tezt'
translate第二个参数是可选的,用来指定需要删除的字符,如删除所有空格
>>> ' this is an incredible test' . translate(table,' ') 'thizizaninkredibletezt'
*****capwords******
string.capwords(s[. sep]) 使用split函数分割字符串s(以sep为分隔符),使用capitalize函数
将分割得到的各单词首字母大学,并使用join函数以sep为分隔符将各单词连接起来
import string
s = string.capwords("how soft works")
print(s) How Soft Works
s = string.capwords("how,SOFT,works", ",")
print(s) How,Soft,Works