Python内建序列之字符串

字符串:字符串可以使用所有通用的序列操作,字符串与元组一样,同样是不可变的序列。

字符串格式化:

使用字符串格式化操作符(%)来实现,如果格式化字符串里面有%,必须使用%%,这样Python就不会把%当成格式化操作符

[root@rhel6164 ~]# python
Python 2.6.6 (r266:84292, Apr 11 2011, 15:50:32)
[GCC 4.4.4 20100726 (Red Hat 4.4.4-13)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> format="Hello, %s. %s is a good day!" #指定后面格式化为字符串
>>> values=('Clef','It')
>>> print format % values
Hello, Clef. It is a good day!
格式化操作符的右操作数可以是任何东西,如果是元组或者映射类型,那么字符串格式化将会有所不同。如果有操作数是元组的话,则其中的每一个元素都会被单独格式化,每个值都需要一个对应的转换说明符

>>> '%s plus %s equals %s' % (1,2,3)
'1 plus 2 equals 3'
>>> '%s plus %s equals %s' % (1,2) #为元组,但是参数个数不匹配
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: not enough arguments for format string
>>>
字符串格式化基本的转换说明符,下面这些项的 顺序是至关重要的

  1. %字符:标记转换说明符的开始
  2. 转换标志(可选):- 表示左对齐;+ 表示在转换值之前要加上正负号;" "(空白字符)表示正数之前保留的空格;0表示转换值若位数不够则用0填充
  3. 最小字符宽度(可选):转换后的字符串至少应该具有该值指定的宽度。如果是*,则宽度会从元组中读出
  4. 点(.)后跟精度值(可选):如果转换的是实数,精度值就表示出现在小数点后的位数。如果转换的是字符串,那么该数字就表示最大字段宽度。如果是*,那么精度将会从元组中读出
  5. 转换类型(见下表格)
转换类型含义
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对象)
>>> '%.5s' % 'Guido van Rossum' #'5'表示最大字段宽度
'Guido'
>>> from math import pi
>>> '%10.2f' % pi #字段宽度为10,精度为2
'      3.14'
>>> '%.*s' % (5, 'Guido van Rossum') #使用*,表示从元组参数中读取字符宽度或者精度,这里为字符宽度为5
'Guido'

字符串方法:

字符串从string模块中“继承”了很多方法,这里就介绍一些很常用的方法

有用的字符串常量

  • string.digits:包含数字0~9的字符串
  • string.letters:包含所有字母(大写或小写)的字符串
  • string.lowercase:包含所有小写字母的字符串
  • string.printable:包含所用可打印字符的字符串
  • string.punctuation:包含所有标点的字符串
  • string.uppercase:包含所有大写字母的字符串

字母字符串常量具体值取决于Python所配置的语言,如果可以确定自己使用的是ASCII,那么可以在变量中使用ascii_前缀,例如string.ascci_letters,BTW,在Python 3.0中,string.letters和其相关内容都被移除,如果需要则使用string.ascii_letters常量代替

[root@rhel6164 ~]# python
Python 2.6.6 (r266:84292, Apr 11 2011, 15:50:32)
[GCC 4.4.4 20100726 (Red Hat 4.4.4-13)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import string
>>> string.letters #这里使用的是2.6.6版本的Python
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
[root@rhel6164 ~]$ python
Python 3.2 (r32:88445, Jan  2 2012, 02:50:39)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-46)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import string
>>> string.letters #这里使用的是3.2版本的Python,不可以直接用string.letters
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'letters'
>>> string.ascii_letters
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
字符串方法都是返回修改后的字符串,本身原字符串并没有改变

1. find方法

可以在一个较长的字符串中查找子字符串,它返回子串所在位置的最左端索引,如果没有找到则返回-1

>>> my_strings="This is testing"
>>> my_strings.find('is')
2
>>> my_strings.find('clef')
-1

2. join方法

它是split方法的逆方法,用来在队列中添加元素,需要添加的队列元素必须是字符串

>>> my_list=[1,2,3,4,5]
>>> my_string='+'
>>> my_string.join(my_list) #需要添加的队列元素必须是字符串
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: sequence item 0: expected string, int found
>>> my_list=['1','2','3','4','5']
>>> my_string.join(my_list)
'1+2+3+4+5'
>>> dirs='','usr','bin','env' #这里为元组还是可以进行添加
>>> '/'.join(dirs)
'/usr/bin/env'

3. lower方法

返回字符串的小写字母版本

>>> my_strings="This"
>>> my_strings.lower()
'this'
>>> my_strings #原字符串并没有改变
'This'

4. replace方法

返回字符串的所用匹配项均被替换之后得到的字符串

>>> "It is a testing".replace('is','replaced') #用'replaced'替换'is'
'It replaced a testing'

5. split方法

它是上面说的join方法的逆方法,用来将字符串分隔成序列

>>> '1+2+3+4+5'.split('+')
['1', '2', '3', '4', '5']
>>> '/usr/bin/env'.split('/')
['', 'usr', 'bin', 'env']

6. strip方法

返回去除两侧(不包括内部)空格的字符串,也可以去除字符串两侧的其他字符,将它们作为strip方法的参数即可

>>> '   this is testing  '.strip() #去除了两侧的空格,并且保留了字符串内部的空格
'this is testing'
>>> 'xxxthis is testing!!!xxx'.strip('x!') #也可以用其他字符来代替默认的空格,这里用'x'或'!'来代替了默认的空格
'this is testing'

7. translate方法

translate方法和上面replace方法一样,可以替换字符串中的某些部分,但是和前者不同的是,translate方法之处理单个字符,它的优势在于可以同时处理多个替换,有些时候比replace效率高得多。在使用translate转换之前,需要先完成一张转换表,转换表中是以某个字符替换某个字符的对应关系,因为这个表(事实上是字符串)有多达256个项目,我们还是不要自己写了,使用string模块里面的maketrans函数就行。

maketrans函数接受两个参数,两个等长的字符串,表示第一个字符串中的每个字符都用第二个字符串中相同位置的字符替换。

>>> from string import maketrans #导入maketrans函数
>>> table=maketrans('cs','kz') #指明用'k'来替换'c',用'z'来替换's'
>>> len(table) #长度为256
256
>>> table[97:123] #现在已经用'k'替换了'c',用'z'替换了's'
'abkdefghijklmnopqrztuvwxyz'
>>> maketrans('','')[97:123]
'abcdefghijklmnopqrstuvwxyz'
>>> 'this is an incredible testing'.translate(table) #这里已经用'k'替换了'c',用'z'替换了's'
'thiz iz an inkredible tezting'
<pre name="code" class="python">#translate的第二个参数是可选的,指定要删除的字符,这里指定为空,删除了字符串里面的空格
>>> 'this is an incredible testing'.translate(table,' ') 
'thizizaninkredibletezting'


                
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值