ch3 使用字符串

3.1 基本字符串操作

  • 所有标准的序列操作(索引,分片,乘法,判断成员资格,求长度,取最大值和最小值)对字符串都适用,但是分片赋值是不合法的,因为字符串都是不可变的

3.2 字符串格式化

  • 字符串格式化使用%实现,在%的左侧放置一个字符串,右侧则放置希望格式化的值。可以使用一个值,如一个字符串或者数字,也可以使用多个值比如元组和字典。
>>>format = "Hello, %s. %s enough for ya?"
>>>values = ('world', 'Hot')
>>>print format % values
Hello, world. Hot enough for ya?
  • %部分称为转换说明符,标记了需要插入转换值的位置。s表示值会被格式化为字符串,如果不是字符串会用str将其转换为字符串。

    如果要在格式化字符串里面包括百分号,那么必须使用%%,这样就不会将百分号误认为是转换说明符了


如果要格式化实数,可以使用f说明符类型,同时提供所需要的精度:一个句点再加上希望保留的小数位数。因为格式化说明符总是以表示类型的字符结束,所以精度应该放在类型字符前面。
>>>format = "Pi with three decimals: %.3f"
>>>from math import pi
>>>print format % pi
Pi with three decimals: 3.142

string模板提供另一种格式化值的方法:模板字符串,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('A $thing must never $action.')
>>>d = {}
>>>d['thing'] = 'gentleman'
>>>d['action'] = 'show his socks'
>>>s.substitute(d)
'A gentleman must never show his socks.'

3.3 字符串格式化:完整版

  • 格式化操作符的右操作数可以是任何东西,如果是元组或者映射类型(如字典),那么字符串格式化将会有所不同。如果右操作数是元组的话,则其中的每个元素都会被单独格式化,每个值都需要一个对应的转换说明符。
    如果需要转换的元组作为转换表达式的一部分存在,那么必须将它用圆括号括起来,以避免出错。
>>>'$s plus %s equals %s' % (1,1,2) #不能用% 1,1,2
'1 plus 1 equals 2'
  • 基本的转换说明符包括以下几个部分
    1. %字符:标记转换说明符的开始
    2. 转换标志(可选):-表示左对齐;+表示在转换值之前要加上正负号;”“表示正数之前保留空格;0表示转换值若位数不够则用0填充
    3. 最小字段宽度(可选):转换后的字符串至少应该具有该值指定的宽度。如果是*,则宽度会从值元组中读出
    4. 点(.)后跟精度值(可选):如果转换的是实数,精度值就表示出现在小数点后的位数,如果转换的是字符串,那么该数字就表示最大字段宽度。如果是*,则宽度会从值元组中读出
    5. 转换类型

3.3.1 简单转换

>>>'Price of eggs: $%d' % 42
'Price of eggs: $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: %s' %42L
'Using repr: 42l'

3.3.2 字段宽度和精度

  • 转换说明符可以包括字段宽度和精度,字符宽度是转换后的值所保留的最小字符个数,精度则是结果中应该包含的小数位数,或者是转换后的值所能包含的最大字符个数
  • 这两个参数都是整数(首先是字段宽度,然后是精度),通过点号分隔,如果只给出精度,就必须包含点号。
>>>'%10f' % pi
'  3.141593'
>>>'%10.2f' % pi
'      3.14'
>>>'%.2f' % pi
'3.14'
>>>'%.5s' % 'Guido van Rossum'
'Guido'
  • 可以使用*作为字段宽度或者精度,此时数值慧聪元组参数中读出
>>>'%.*s' % (5,'Guido van Rossum')

3.3.3 符号、对齐和0填充

  • 在字段宽度和精度值之前还可以放置一个”标表“,可以是0,加号,减号或空格
>>>'%010.2f' % pi
'0000003.14'
>>>'%-10.2f' % pi
3.14
>>>print('%5d' % 10)+ '\n' + ('%5d' % -10)F
10
-10

3.4 字符串方法

  • 字符串的方法比列表的方法还要丰富的多,因为字符串从string模板中继承了很多方法。
    一些有用的字符串常量 <br>
    * string.digits:包含数字0-9的字符串 <br>
    * string.letters:包含所有字母(大写或小写)的字符串 <br>
    * string.lowercase:包含所有小写字母的字符串 <br>
    * string.printable:包含所有可打印字符的字符串 <br>
    * string.punctuation:包含所有标点的字符串 <br>
    * string.uppercase:包含所有大写字母的字符串</li>
    

3.4.1 find

  • find可以在一个较长的字符串中查找子字符串,它返回子串所在位置的最左端索引,找不到返回-1
>>>'With a moo-moo here, and a moo-moo there'.find('moo')
7
  • 还可以接受可选的起始点和结束点参数
>>>subject = '$$$ get rich now!!! $$$'
subject.find('$$$')
0
>>>subject.find('$$$' , 1)
20
>>>subject.find('!!!')
16
>>>subject.find('!!!' , 0, 16)
-1

3.4.2 join

  • join是split方法的逆方法,用来在队列中添加元素(需要添加的队列元素必须是字符串)
>>>seq = ['1','2','3','4','5']
>>>sep = '+'
>>>sep.join(seq)
'1+2+3+4+5'
>>>dirs = '','user','bin','env'
>>>'/'.join(dirs)
/user/bin/env

3.4.3 split

  • 用来将字符串分割成序列
>>>'1+2+3+4+5'.split('+')
['1', '2', '3', '4', '5']
  • 如果不提供任何分隔符,程序会把所有空格作为分隔符(空格、制表、换行等)

3.4.4 lower

  • 返回字符串的小写字母版
>>>'Trondheim Hammer Dance'.lower()
'trondheim hammer dance'
  • title和lower类似,它将所有单词的首字母大写,其他小写。
>>>"that's all folks".title()
"That'S All Folks"

3.4.5 replace

  • 返回某字符串的所有匹配项均被替换之后得到的字符串
>>>'This is a test'.replace('is','eez')
'Theez eez a test'

3.4.6 strip

  • 返回去除两侧(不包括内部)空格的字符串
>>>'     internal whitespace is kept  '.strip() #也可以加上参数strip.(' *!’)
'internal whitespace is kept'

3.4.7 translate

  • 和replace类似,可以替换字符串中的某些部分,但translate只能处理单个字符,优势在于可以同时进行多个替换。在使用translate转换之前,需要先完成一张转换表,是以某字符替换某字符的对应关系。使用string模块里面的maketrans函数即可。maketrans接受两个参数,两个等长的字符串,第一个字符串中的每个字符都用第二个字符串中相同位置的字符替换。
>>>from string import maketrans
>>>table = maketrans('cs','kz')
>>>'this is an incredible test'.translate(table)
'thiz iz an inkredible tezt'
  • translate的第二个参数是可选的,用来指定需要删除的字符。
>>>'this is an incredible test'.translate(table,' ')
'thizizaninkredibletezt'

3.5 小结

  • 介绍了字符串两种非常重要的使用方式
    1. 字符串格式化
    2. 字符串方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值