概 述:Python字符串 – 一个有序的字符集合,用于存储和表现基于文本的信息。
1 字符串
1.1 单引号、双引号、三引号和转义引号
单引号和双引号没有区别;三重引号编写多行字符串块;转义引号代表特殊字节。
1 2 3 4 5 6 7 8 9 10 11 | >>> 'Hello World!' 'Hello World!' >>> "Hello World!" 'Hello World!' >>> ''' Hello World! ... I am SK_Lavender! ... ''' ' Hello World!\nI am SK_Lavender!\n' >>> 'Let\'s go!' "Let's go!" >>> |
1.2 字符串表示,str和repr
str函数 : 把值转换成合理形式的字符串,便于用户理解。
Repr函数: 以合法的Python表达式的形式来表示值。
1 2 3 4 5 6 7 8 9 10 11 12 | >>> "Hello World!" 'Hello World!' >>> 1000L 1000L >>> print "Hello World!" Hello World! >>> print 1000L 1000 >>> print repr("Hello World!") 'Hello World!' >>> print str("Hello World!") Hello World! |
repr(x)函数也可写作`x`的形式(`是反引号)
1 2 3 4 5 | >>> temp = 42L >>> print temp 42 >>> print `temp` 42L |
2 基本字符串操作
2.1 字符串序列操作
2.1.1 字符串索引
字符串就是由字符组成的序列。索引0指向第一个元素。
1 2 3 | >>> greeting = 'hello' >>> greeting[0] 'h' |
使用负数索引时,Python会从右边,也就是从最后1个元素开始计数。最后1个元素的位置编号是-1。
1 2 | >>> greeting[-1] 'o' |
2.1.2 字符串分片
可以使用分片操作来访问一定范围内的字符串元素。第一个索引的元素包含在分片内,而第二个则不包含在分片内。
1 2 3 4 5 | >>> tag = '<a href="http://www.pythom.org">Python web site</a>' >>> tag[9:30] 'http://www.pythom.org' >>> tag[32:-4] 'Python web site' |
添加步长,其中最后一个数是步长。
1 2 | >>> tag[0:-1:2] '< rf"tp/wwpto.r"Pto e ie/' |
2.1.3 字符串序列相加
1 2 | >>> 'Hello' + ' World!' 'Hello World!' |
2.1.4 字符串乘法
用一个数字x乘以一个字符串会生成一个新的字符串。在新的字符串中,原来的序列被重复x次。
1 2 | >>> 'Hello ' * 4 'Hello Hello Hello Hello ' |
2.1.5 判断成员资格
可使用 in 运算符检查一个值是否在一个字符串中。
1 2 3 | >>> permissions = 'rw' >>> 'w' in permissions True |
2.1.6 求长度、最小值和最大值
1 2 3 4 5 6 7 | >>> str = 'hello,XLX' >>> len(str) 9 >>> min(str) ',' >>> max(str) 'o' |
2.2 字符串是不可变的
1 2 3 4 5 | >>> str = 'hello,XLX' >>> str[0] = 'a' Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'str' object does not support item assignment |
3 字符串格式化
字符串格式化使用字符串格式化操作符,即百分号%来实现。
在%的左侧放置一个字符串(格式化字符串),而右侧则放置希望被格式化的值。
1 2 3 4 | >>> format = "hello,%s. %s enough for ya?" >>> values = ('world','Hot') >>> print format % values hello,world. Hot enough for ya? |
格式化字符串的%s部分成为转换说明符。
基本的转换说明符包括以下四个部分:、
(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对象) |
3.1 简单转换
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | >>> '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: %r' % 42L 'Using repr: 42L' >>> |
3.2 字段宽度和精度
字段宽度:转换后的值所保留的最小字符个数
精度:结果中应该包含的小数位数
两者通过点号(.)分隔,但是只给出精度,就必须包含点号。
1 2 3 4 5 6 7 8 9 | >>> from math import pi >>> '%10f' % pi ' 3.141593' >>> '%10.2f' % pi ' 3.14' >>> '%.2f' % pi '3.14' >>> '%.5s' % 'Guido van Rossum' 'Guido' |
可以使用*号作为字段宽度和精度,此时数据会从元组参数中读出。
1 2 3 4 5 | >>> '%*.*f' % (10,2,pi) ' 3.14' >>> '%.*s' % (5,'Guido van Rossum') 'Guido' >>> |
3.3 符号、对齐和用0填充
在字段宽度和精度之前可以放置一个标志,该标志可以是零、加号、减号或者空格。
3.3.1 零(0)表示数字将会用0进行填充
1 2 | >>> 'pi=%010.2f' % pi 'pi=0000003.14' |
3.3.2 减号(-)表示左对齐数值
1 2 | >>> 'pi=%-10.2f' % pi 'pi=3.14 ' |
3.3.3 空白( )表示在正数之前加上空格
1 2 3 | >>> print('% 5d' % 10) + '\n' + ('% 5d' % -10) 10 -10 |
3.3.4 加号(+)表示表示标出正负号
1 2 3 | >>> print('%+5d' % 10) + '\n' + ('%+5d' % -10) +10 -10 |
4 字符串方法
4.1 find
函数功能: 在一个长的字符串中查找子串。返回子串所在位置的最左端索引。若没有找到则返回-1。
1 2 3 4 5 6 7 8 9 | >>> 'With a moo-moo here. and a moo-moo there'.find('moo') 7 >>> title = "Monty Python's Flying Circus" >>> title.find("Monty") 0 >>> title.find("Python") 6 >>> title.find("XLX") -1 |
4.2 join
函数功能:用来连接序列中的元素。
1 2 3 4 | >>> seq = ['I','Love','You'] >>> sep = ' ' >>> sep.join(seq) 'I Love You' |
4.3 lower
函数功能: 返回字符串的小写字母版。
1 2 | >>> 'I Love You!'.lower() 'i love you!' |
4.4 replace
函数功能:返回某字符串的所有匹配项均被替换之后得到的字符串。
1 2 | >>> 'This is a test'.replace('is','ezz') 'Thezz ezz a test' |
4.5 split
函数功能:将字符串分割成序列。
1 2 3 4 | >>> '/usr/bin/env'.split('/') ['', 'usr', 'bin', 'env'] >>> 'Using the default'.split() ['Using', 'the', 'default'] |
如果不提供任何分隔符,程序会把所有空格作为分隔符。
4.6 strip
函数功能:返回去除两侧(不包括内部)空格的字符串。
1 2 | >>> ' I Love You '.strip() 'I Love You' |
4.7 translate
函数功能:替换字符串中的某些部分,但是只处理单个字符。
1 2 3 4 | >>> from string import maketrans >>> table = maketrans('cs','kz') >>> 'This is an incredible test'.translate(table) 'Thiz iz an inkredible tezt' |
说明:
table: 转换表。Maketrans接受两个参数:两个等长的字符串,表示第一个字符串中的每一个字符都用第二个字符串中相同位置的字符替换。