分享

第三章:使用字符串

 岚风窗 2015-05-29
一、基本字符串操作
所有标准的序列操作(索引、分片、乘法、成员资格、求长度、取最小值和最大值)对字符串同样适用。但因为字符串是不可变的,所以分片赋值是不合法的。


二、字符串格式化:精简版
字符串格式化使用字符串格式化操作符--即百分号%来实现。
注:%也可以用作模运算(取余)操作符。
用法:在百分号%的左侧放置一个字符串(格式化字符串),而右侧则放置希望格式化的值。可以使用一个值,如:一个字符串或者数字,也可以使用多个值的元组或者字典。

注:如果使用列表或者其它序列代替元组,那么序列就会被解释为一个值。只有元组和字典可以格式化一个以上的值。

格式化字符串的%s部分称为转换说明符,它们标记了需要插入转换值的位置。s表示值会被格式化为字符串--如果不是字符串,则会用str将其转换为字符串。
注:如果要在格式化字符串里面包括百分号,那么必须使用%%。

如果要格式化实数(浮点数),可以使用f说明符类型,同时提供所需要的精度:一个句点再加上希望保留的小数位数,精度放在类型字符前面。


三、字符串格式化:完整版
格式化操作符的右操作数可以是任何东西,如果是元组或者映射类型(如字典),那么字符串格式化将会有所不同。
如果右操作数是元组的话,则其中的每一个元素都会被单独格式化,每个值都需要一个对应的转换说明符。
注:如果需要转换的元组作为转换表达式的一部分存在,那么必须将它用小括号括起来。


基本的转换说明符包括以下部分:
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对象)

1、简单转换



2、字段宽度和精度
转换说明符可以包括字段宽度和精度。字段宽度是转换后的值所保留的最小字符个数,精度则是结果中应该包含的小数位数。

可以使用*(星号)作为字段宽度或者精度(或者两者都使用*),此时数值会从元组参数中读出
            
表示精度是5


表示宽度是十、精度是5、还有左对齐

3、符号、对齐和0填充
在字段宽度和精度值之前还可以放置一个“标表”,该标表可以是零、加号、减号或空格。零表示数字将会用0进行填充。

使用减号(-)用来左对齐数值

使用加号(+)表示不管是正数还是负数都标出符号(有对齐的作用)


字符串格式化示例
使用给定的宽度打印格式化后的价格列表



四、字符串方法
字符串方法完全来源于string模块,但是这个模块还包括一些不能作为字符串方法使用的常量和函数。下面是一些有用的字符串常量。
string.digits:包含数字0~9的字符串
string.letters:包含所有字母(大写或小写)的字符串
string.lowercase:包含所有小写字母的字符串
string.printable:包含所有可打印字符的字符串
string.punctuation:包含所有标点的字符串
string.uppercase:包含所有大写字母的字符串

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

注:字符串的find方法并不返回布尔值,如果返回的是0,则证明在索引0位置找到了子串。
这个方法还可以接受可选的起始点和结束点参数:


2、join
join方法是非常重要的字符串方法,它是split方法的逆方法,用来在队列中添加元素:

可以看出,需要添加的队列元素必须是字符串。


3、split
这是一个非常重要的字符串方法,它是join的逆方法,用来将字符串分割成序列

4、lower
lower方法返回字符串的小写字母版


和lower方法相关的是title方法,他会将字符串转换为标题--也就是所有的首字母大写


但是如果是下面这种情况可能就显得不自然了


所以再介绍另外一个string模块的capwords函数


5、replace
replace方法返回某字符串的所有匹配项均被替换之后得到的字符串


6、strip
strip方法返回去除两侧(不包括内部)空格的字符串

它和lower方法一起使用的话就可以很方便的对比输入的和存储的值。


7、translate
translate方法和replace方法一样,可以替换字符串中的某些部分,但是和前者不同的是,translate方法只处理单个字符。它的优势在于可以同时进行多个替换,有时候比replace效率高得多。
在使用translate转换之前,需要先完成一张转换表。转换表中是以某字符替换某字符的对应关系。因为这个表有256个项目,这里用string模块里的maketrans函数表示。

转换表是包含替换ASCII字符集中256个字符的替换字母的字符串

替换后的table表是这样的:

创建这个表后,可以将它用作translate方法的参数,进行字符串的转换:

translate的第二个参数可选,这个参数用来删除指定需要删除的字符。比如下面指定删除空格




本章小结
字符串格式化:求模操作符(%)可以用来将其他值转换为包含转换标志的字符串,例如%s。它还能用来对值进行不同方式的格式化,包括左右对齐、设定字段宽度以及精度值,增加符号(正负号)或者左填充数字0等。
字符串方法:字符串有很多方法。有些非常有用(比如split 和 jion),有些则用很少(比如istitle或者capitalize)。

本章的新函数
 本章的新函数
 函数 描述
 string.capwords(s[, sep]) 使用split函数分割字符串s(以sep为分隔符),
使用capitalize函数将分隔得到
的各单词首字母大写,
并且使用join函数以sep为分隔符
将各单词连接起来。
 string.maketrans(from, to) 创建用于转换的转换表
























    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多