字符串的表现形式
1.单引号或者双引号括起
用单引号''或者双引号“”括起来的就是字符串。
用单引号或双引号括字符串时没有区别的。只是在一些场景下需要需要注意。比如”Let’s go!",一段字符串里包含了单引号,这个时候就需要要双引号将整个字符串括起来,否则解释器会无法识别。如果非要要单引号,那么就需要通过转义字符(\)对字符串中的引号进行转义:’Let\’s go!’
斜杠也可以用来表示跨行,比如一个字符串很长:
“Hello, \
world!."
2.长字符串
如果需要些一个很长的字符串,又要括多行,就可以使用三个单引号或者三个双引号。此时字符串里有单引号或者双引号就不需要转义了。
string1 = ‘’’This is a long story.
“Hello, world!”
The end.‘''
3.原始字符串
原始字符串以r开头:r’abc’。
原始字符串中输入的每个字符都会与书写的方式保持一致。即在普通字符串中,反斜杠可能表示转义,在原始字符串中不会把反斜杠当做特殊字符。比如对于r’abc\’abc’的输出就会是abc\’abc。
但是原始字符串不能以\结尾,否为Python就不知道是否该结束字符串。
4.Unicode
Unicode字符使用u做前缀,u”Hello, world!”
Python2.x默认的字符串编码方式是ASCII,即用一个字节表示一个字符。但是这样对中文及一些其它语言就无法处理了。Unicode把所有语言都统一到一套编码里,这样就不会有乱码了。
关于字符串很重要的一点是字符串是不可变的,即字符串的元素或者分片赋值是不合法的。不过可以对整个字符串变量重新赋值。
>>> str = 'abcd'
>>> str[2] = 'n'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
>>> str = 'qwerrt'
>>> str
'qwerrt'
字符串的常见操作
1.拼接
可以通过’+’将两个字符串连接起来:’abc’ + ‘efg’ 输出’abcefg’。拼接符号只能连接两个字符串,不能讲字符串和其它类型的数据连接,否则会出错。
字符串转码
上面已经讲了Unicode把所有语言都统一到一套编码里。在ASCII编码方式里,只用一个字节就可以表示一个英文字母,但是使用Unicode就需要用两个字节。如果是纯英文字符文本,用Unicode编码就会需要多一倍的存储空间。从而出现了UTF-8变长编码,UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节。
通过u’xxx’.encode(‘utf-8')方法可以把u'xxx’转换为UTF-8编码。
通过’xxx’.decode(‘utf-8')方法可以吧UTF-8表示的字符串’xxx’转换为Unicode字符串u’xxx’。
当Python脚本中包含中文时,就需要指定保存为UTF-8编码。当Python解释器读取源代码时,为了让它按照UTF-8编码读取,需要在文件开头加上:# -*- coding: utf-8 -*-
字符串格式化
字符串格式化使用字符串格式化操作符 % 来实现。在%左侧放置一个字符串(格式化字符串),而右侧则放置希望被格式化的值,可以是任意类型。比如:
>>> print 'Hello, %s!' % 'Tom'
Hello, Tom!
转换说明符包含以下部分,项的顺序很重要。
- %字符:标记转换说明符的开始
- 转换标志(可选):-表示左对齐;+表示在转换值之前要加上正负号。“ ”表示正数之前要保留空格。0表示转换值若位数不够则用0填充
- 最小字段宽度(可选):转换后的字符串至少应该具有该值制定的宽度。如果是*,则宽度会从值元组中读出。如果是小数,则宽度包含小数点。
- 点(.)后跟精度值(可选):如果转换的是实数,精度之就表示出现在小数点后的位数。如果转换的是字符串,那么该数字就是表示最大字段宽度。如果是*,那么精度就会从元组中读出。
- 转换类型:d,i--带符号的十进制整数;e--科学计数法表示的浮点数(小写);E--科学计数法表示的浮点数(大写);f,F--十进制浮点数;C--单字符(接受整数或者单字符字符串);r--字符串(使用repr转换任意Python对象);s--字符串(使用str转换任意Python对象)
字符串常见的方法
字符串本身是不可变对象,以下的一些方法并不是改变了原有字符串,而是操作之后返回了一个新的字符串。
1.string.find(sub,startIndex,endIndex)
在一个较长的字符串中查找子串,返回子串所在位置的最左端索引,如果没有找到返回-1。也可以指定查找范围,包含第一个索引,但是不包含第二个。
举例:
>>> 'hello world!'.find('world')
6
>>> 'hello world!'.find('world',0,5)
-1
2.string.join(sequence)
用来连接序列中的元素,序列元素必须都是字符串。
举例:
>>> seq=['ab','cd','ef']
>>> '+'.join(seq)
'ab+cd+ef’
3.string.lower()
返回字符串的小写字母版本
举例:
>>> 'ABCD'.lower()
‘abcd'
4.string.replace(old,new)
返回某字符串的所有匹配项均被替换之后得到的字符串。
举例:
>>> 'abcabcabcacb'.replace('ab','AB')
‘ABcABcABcacb'
5.string.split(sep)
将字符串分隔成序列。如果不提供任何分隔符,则会把空格当成分隔符。
举例:
>>> 'ab ab ab'.split('b')
['a', ' a', ' a', ‘']
6.string.strip()
返回去除两侧(不包含内部)空格的字符串
返回去除两侧(不包含内部)指定字符的字符串,注意是字符。
举例:
>>> ' abc abcbbb '.strip()
'abc abcbbb'
>>> 'abc abcbbb'.strip('a')
'bc abcbbb'
>>> '!**abc** ab!cbbb !**'.strip('!*')
'abc** ab!cbbb '
7.string.translate(table,deletechars)
替换字符串中的某些部分,但是只处理单个字符,可以同时进行多个替换。
第一个参数是转换表,就是以某字符替换某字符的对应关系。可以使用makertrans函数,包含ASCII字符集中的256个字符。该函数接受两个参数,两个等长的字符串,表示第一个字符串中的每个字符都用第二个字符串中相同位置的字符替换。也可以自己建立一个字典,键值对就是替换关系。
第二个参数可以指定需要删除的字符。
举例:
>>> from string import maketrans
>>> table = maketrans('ab','AB')
>>> 'anmjkbuyab'.translate(table)
'AnmjkBuyAB'