第3章 Python笔记 使用字符串

来源:互联网 发布:淘宝最好的饰品店 编辑:程序博客网 时间:2024/05/16 12:38

一、基本字符串操作

所有标准的序列操作(分片、索引、乘法、成员资格、求长度、最大值、最小值)对于字符串同样适用,但是字符串是不可变的,也就是说不能对字符串进行修改。

二、字符串格式化

1、基本语法

1.1 字符串使用字符串格式化操作符 “%” 来实现格式化,在%的左侧放置一个字符串,右侧放置希望被格式化的值。

>>> format="Hello,%s,%s enough for ya?">>> values=('world','Hot')>>> print format % valuesHello,world,Hot enough for ya?
其中%s称为转换说明符,它标记了需要插入转换值的位置。s表示值会被格式化为字符串——如果不是字符串,则会用str将其转换为字符串。

注意:只有元组和字典可以格式化一个以上的值,使用其他序列会被解释为一个值。
1.2  如果要格式化实数(浮点数),可以使用f说明转换说明符的类型,同时提供所需要的精度:一个句点加上希望保留的小数位数。

>>> format="Pi with three decimals:%.3f">>> from math import pi>>> print format % piPi with three decimals:3.142
精度应该放在类型字符前面。

1.3 模板字符串

substitute模板方法使传递进来的关键字参数foo替换字符串中的$foo:

>>> from string import Template>>> s=Template('$x,glorious $x!')>>> s.substitute(x='slurm')'slurm,glorious slurm!'
如果替换字符串是单词的一部分,那么参数名必须用括号括起来:

>>> s=Template("It's ${x}tastic!")>>> s.substitute(x='slurm')"It's slurmtastic!"
美元$符号用$$插入:

>>> s=Template("Make $$ selling $x")>>> s.substitute(x='slurm')'Make $ selling slurm'
也可以使用字典变量提供值/名称对:

>>> s=Template('A $thing must never $action.')>>> d={}>>> d['thing']='gentleman'>>> d['action']='show his socks'>>> s.substitute(d)'A gentleman must never show his socks.'
2、完整的进行字符串格式化

2.1 基本的转换说明符包括以下几个部分。注意,这些项的顺序是固定的。

(1)%字符:标记转换说明符的开始。

(2)转换标志(可选):- 表示左对齐;+表示在转换值之前要加上正负号;""(空白字符)表示正数之前保留空格;0表示转换值若位数不够则用0填充。

(3)最小字段宽度(可选):转换后的字符串至少应该具有该值指定的宽度。如果是*,则宽度会从值元组中读出。

(4)点(.)后跟精度值(可选):如果转换的是实数,精度值就表示出现在小数点后的位数。如果转换的是字符串,那么该数字就表示最大字段宽度。如果是*,那么精度会从元组中读出。

(5)转换类型:见下表。

2.2 简单转换

>>> 'Price of egg:$%d'%42'Price of egg:$42'>>> 'Hexadecimal price of eggs:%x'%42'Hexadecimal price of eggs:2a'>>> from math import pi>>> 'Pi:%f...'%pi'Pi:3.141593...'>>> 'Very inexact estimate of pi:%i'%pi'Very inexact estimate of pi:3'>>> 'Using str:%s'%42L'Using str:42'>>> 'Using repr:%r'%42L'Using repr:42L'
2.3 字段宽度和精度

字段宽度是指转换后的值所保留的最小字符个数。

精度指的是结果中应该包含的小数位数,或者(对于字符串)是转换后的值所能包含的最大字符个数。
格式为(字段宽度.精度),如果只给出精度,就必须包含点号;如果只给出字段宽度,则不需要加点号:

>>> '%10f'%pi #字段宽10'  3.141593'>>> '%10.2f'%pi #字段宽10,精度为2'      3.14'>>> '%.2f'%pi #精度2'3.14'>>> '%.5s'%'Guido van Rossum''Guido'
使用*作为字段宽度或者精度,此时数值会从元组参数中读出:

>>> '%.*s'%(5,'Guido van Rossum')'Guido'
2.4 符号、对齐和用0填充

用0填充:

>>> '%010.2f'%pi'0000003.14'
(-)左对齐:

>>> '%-10.2f'%pi'3.14      '
("")也就是空白,相当于空格,表示正数前加空格:

>>> print('% 5d'%10)+'\n'+('% 5d'% -10)   10  -10
以上操作符都应放在字段宽度和精度的前面,顺序严格按照2.1所示的顺序执行。
三、字符串方法

1、find方法用于在一个较长的字符串中查找子串,返回子串所在位置的最左端索引,如果没有则返回-1。

>>> 'With a moo-moo here,and amoo-moo there'.find('moo')7>>> title="Monty Pyhon's Flying Circus">>> title.find('Monty')0>>> title.find('Pyhon')6>>> title.find('Flying')14>>> title.find('Zirquss')-1
该方法还可以接收可选的起始点和结束点参数:

>>> subject='$$$ Get rich now!!! $$$'>>> subject.find('$$$')0>>> subject.find('$$$',1)20>>> subject.find('!!!')16>>> subject.find('!!!',0,16)-1
2、join方法用来连接序列中的元素:

>>> seq=[1,2,3,4,5]>>> sep='+'>>> sep.join(seq)Traceback (most recent call last):  File "<pyshell#2>", line 1, in <module>    sep.join(seq)TypeError: sequence item 0: expected string, int found>>> seq=['1','2','3','4','5']>>> sep='+'>>> sep.join(seq)'1+2+3+4+5'>>> dirs='', 'usr', 'bin', 'env'>>> '/'.join(dirs)'/usr/bin/env'>>> print 'C:'+'\\'.join(dirs)C:\usr\bin\env
可以看到,需要连接的序列元素都必须是字符串。
3、lower方法返回字符串的小写字母版:

>>> 'Trondheim Hammer Dance'.lower()'trondheim hammer dance'
4、replace

replace方法返回某字符串的所有匹配项均被替换之后得到字符串。类似于“查找并替换”的功能。

>>> 'This is a test'.replace('is','eez')'Theez eez a test'
5、split方法是join的逆方法,用来将字符串分割成序列。

>>> '1+2+3+4+5'.split('+')['1', '2', '3', '4', '5']>>> 'Using the default'.split()['Using', 'the', 'default']
注意:如果不提供任何分隔符,程序会把所有空格作为分隔符(空格、制表、换行等)。
6、strip方法返回去除两侧(不包括内部)空格的字符串:

>>> '     internal whitespace is kept     '.strip()'internal whitespace is kept'
也可以指定去除的字符:

>>> '*** SPAM * for * wvwryone!!! ***'.strip('*!')' SPAM * for * wvwryone!!! '>>> '*** SPAM * for * wvwryone!!! ***'.strip( '*')' SPAM * for * wvwryone!!! '
上述两段代码的结果一样,目前不清楚!的具体意思

7、translate方法和replace方法一样,唯一的区别在于translate方法只处理单个字符,它的优势在于可以同时进行多个替换,有时候比replace效率高。

















原创粉丝点击