第3章 使用字符串
3.1. 基本字符串操作
★ 字符串不可变
3.2. 字符串格式化:精简版
使用格式化操作符:字符串格式%值
>>> format = "Hello, %s, I have %.5f dollars now." >>> values = ('world', 200) >>> format % values 'Hello, world, I have 200.00000 dollars now.'
类似c语言格式化
使用模板字符串,Template()函数指定格式,substitute()方法用参数x替换$x
#当替换字段是其他字符串一部分,需要用${x}格式 #$$用于插入$符号 >>> s = Template("$x, glorious $x! It's ${y}tastic! Make $$ sellilng $x!") >>> s.substitute(x='slurm', y='slurm1') "slurm, glorious slurm! It's slurm1tastic! Make $ sellilng slurm!" #使用字典变量提供值/名称对 >>> s = Template("$x, glorious $x! It's ${y}tastic! Make $$ sellilng $x!") >>> d={} >>> d['x']='slurm2' >>> d['y']='slurm3' >>> s.substitute(d) "slurm2, glorious slurm2! It's slurm3tastic! Make $ sellilng slurm2!"
3.3. 字符串格式化:完整版
- 基本转换说明符
转换说明符 | 说明 |
---|---|
%字符 | 标记转换说明符的开始 |
转换标志(optional) | -,表示左对齐 +,表示转换至之前添加正负号 ”“,表示证书之前保留空格 0,表示转换值若位数不够则用0填充 |
最小字段宽度(optional) | 转换后字符串至少有该值指定的宽度 *,宽度从元组中读出 |
点(.)后跟精度值(optional) | 转换实数,精度值表示小数点后的位数 转换字符串,数字表示最大字段宽度 *,精度从元组中读出 |
2. 字符串格式化转换类型
转换类型 | 含义 |
---|---|
d,i | 有符号十进制整数 |
o | 无符号八进制 |
u | 无符号十进制 |
x | 无符号十六进制(小写) |
X | 无符号十六进制(大写) |
e | 科学记数法表示的浮点数(小写) |
E | 科学记数法表示的浮点数(大写) |
f,F | 十进制浮点数 |
g | 指数大于-4或者小于精度值,与e相同 其他,与f相同 |
G | 指数大于-4或者小于精度值,与E相同 其他,与F相同 |
C | 单字符(接收整数或单字符字符串) |
r | 字符串(使用repr转换任意Python对象) |
s | 字符串(使用str转换任意Python对象) |
字符串格式化操作类似C语言,基础部分不在赘述。
3.3. 符号、对齐和0填充
使用*从元组中读取转换说明符
#字符串宽度和浮点数宽度使用*标识,使用时从元组中都去实际的宽度值
>>> format = '|%-*s|%*.2f|'
>>> format % (20, 'format_test', 15, 0.4)
'|format_test | 0.40|'
3.4. 字符串方法
字符串方法来源于string模块,该模块中还有一些常用的字符串常量。
常量 | 说明 |
---|---|
string.digits | 包含数字0~9的字符串 |
string.letters | 包含所有字母(大写或小写)的字符串,与Python设置的语言有关 |
string.lowercase | 包含所有小写字母的字符串 |
string.printable | 包含所有可打印字符的字符串 |
string.punctuation | 包含所有标点的字符串 |
string.uppercase | 包含所有大写字母的字符串 |
3.4.1. find
- 在字符串中查找子字符串。找到,返回子串位置最左端的索引;否则,返回-1。
- 该方法支持指定查找的起始和结束位置。
>>> subject = '$$$ Get rich now!!! $$$'
>>> subject.find('$$$')
0
#起始位置为可搜索的第一个字符位置,结束位置为不可搜索的第一个字符位置
>>> subject.find('$$$', 3)
20
>>> subject.find('!!!')
16
>>> subject.find('!!!', 0, 16)
-1
>>>
3.4.2. join
在队列中添加元素(分隔符)。
>>> dirs = '', 'usr', 'bin', 'env'
>>> print '/'.join(dirs)
/usr/bin/env
3.4.3. lower
返回字符串的小写字母版。
>>> 'Test Lower Method.'.lower() 'test lower method.'
常用于需要“不区分大小写”的场合。
- 类似方法, title()/capwords(),用于将字符串转换为标题格式(所有单词首字母大写),而这使用的单次划分方法不同,得到不同结果,请自行验证吧。
3.4.4. replace
返回某字符串的所有匹配项均被替换之后得到的字符串(即:查找并替换)。
>>> 'Test replace Method'.replace('replace', 'REPLACE')
'Test REPLACE Method'
3.4.5. split
字符串分割成序列。
>>> '/usr/bin/env'.split('/')
['', 'usr', 'bin', 'env']
#split若未指定分隔符,则默认空格(空格、制表、换行)为分隔符
>>> 'Test Split Method.'.split()
['Test', 'Split', 'Method.']
3.4.6. strip
返回去除字符串首尾的字符
#strip默认去掉空格
>>> ' test strip method '.strip()
'test strip method'
#strip可指定要去掉的字符(多个)
>>> '******test strip method!!!!!#####*******'.strip('*!#')
'test strip method'
3.4.7. translate
- 替换字符串中的某部分,只处理单字符。
- 可以同时进行多个替换。
使用translate前,要先生成转换表。可使用maketrans函数,生成包含替换ASCII字符集中256个字符的替换字母的字符串。
>>> maketrans('ab', 'cd')[97:123] 'cdcdefghijklmnopqrstuvwxyz'
使用转换表替换字符串
>>> table = maketrans('ab', 'cd') >>> 'Test: abababab aaaabbbb'.translate(table) 'Test: cdcdcdcd ccccdddd'
translate第2个参数指定需要删除的字符
>>> 'Test: abababab aaaabbbb'.translate(table," ") 'Test:cdcdcdcdccccdddd' >>> 'Test: abababab aaaabbbb'.translate(table,"a ") 'Test:dddddddd'