3.1基本字符串操作
由于字符串和上一章提到的元组一样,是不可变的,所以只能进行‘read’(读)类的操作,而不能进行‘write’(写)类的操作,例如切片赋值,append。
3.2字符串格式化
3.2.1简介
字符串格式化相当于将一个样本先写出来,然后往里面填数据。例如有一封电子邮件,需要发给一百位100顾客。对于每位顾客来说,邮件内容都是相同的,不同的只是姓名。那么可以先把样本写出来,然后将100名顾客的姓名以格式化的形式添加进去。(只有元组和字典可以格式化一个以上的值。)
用法是:电子邮件样本 % 顾客姓名元组
%是字符串格式化操作符。
举个例子:
format = 'Hello, %s. %s enough for you?'
format是格式化的字符串,%s的位置代表将要被string给代替。(还有其他的,例如%i代表此位置将被integer代替)
values=('world', 'Hot')
values是一个包含两个string的元组,它的元素将分别对应format中的两个转换说明符(%s,或者%i, %f等)。一般来说(除了下一节提到的使用*作为字段宽度或者精度),只有当它的元素数量完全等于format中转换说明符才能正常运行,否则会报错。
也可以使用模板字符串(string中的Template的substitue方法)来进行格式化。
3.2.2更多细节
1.类型
当选择转换说明符类型的时候,可以参考下面的表格。
转换说明符的类型不一定要和数据类型完全一样,例如当转换说明符是%i,数据时3.14时,结果会是3。
另外,基本上所有的数据都能用%s表示,但是string基本上不能用%s,%r之外的转换说明符表示。
2.字段宽度和精度
宽度是转换后的值保留的最小字符数量(是最小,当精度大于宽度时,字段会大于宽度),精度是保留的小数点位数,或者(字符串)转换后所包含的最大字符个数。和c语言中的中的类似。
例如:
可以使用*作为字段宽度and/or精度,相应数值会从元组中读出:
3.符号,对齐和0填充
从之前的例子可以看出,当宽度大于浮点数的长度时,数字前面会有空格。可以在宽度前面加上‘标表’(0,+,-或空(默认))以呈现不同的格式。
0表示空格将被0填充(当为负数时,0的填充将在负号之后):
-表示左对齐:
+表示不管正负数都标出符号:
空(默认)则表示将在数字前面(如果有符号,就是符号前面),加空格填充到设定的宽度。如果根据精度表现出来的数值宽度大于设定宽度,则不会加任何空格。
3.3字符串方法
字符串方法有很多,下面只是一些例子,更多的可以搜索python库。很多的方法和他们的用法和java中的string的api类似。
1.find(String str1):在较长字符串中找到str1。返回最左边的索引,如果没有则返回-1。
2.join(string列表):相当于split的逆运算。split是将string以特定字符为分隔符分成几个substring,而join是将几个substring用分隔符重新连接起来。下面例子中,‘abcde‘为分隔符,seq为substring的列表。
3.lower():将字符串所有字符改为小写。有时用户输入‘不分大小写’(验证码等)的时候,一般就是直接把所有输入全部转成小写再进行比较。
还有很多的就不一一介绍了,可以等有需要用的时候再去搜索python库。
4.maketrans和translate:这里额外提一下这两个方法。maketrans在python3.x中已经改成了內建函数,不用再从string中import。
maketrans功能是建立一个转换表,将把字符串中所有出现在第一个参数里的字符转换成相对应的第二个字符串中的字符。在下面这个例子中,table是创建的转换表,是将1转为2,0转为4,而不是将10转为24。所以第一个参数的长度必须和第二个参数长度一样。另外第一行的str也可以替换成任何字符串的变量。