字符串(str)

字符串(Str)是 Python 中最常用的数据类型。

Python中的字符串通常由单引号''、双引号""、三个单引号或三个双引号包围的一串字符组成。

字符串中的字符可以包含数字、字母、中文字符、特殊字符,以及一些不可见的控制字符,如换行符、制表符等。

字符串是序列的一种,是字符的序列,所以序列的相关操作都适用于字符串。字符串是不可变类型,就是说改变一个字符串的元素需要新建一个新的字符串。

1、python2与python3 字符串对比

        Python2中字符串分为普通字符串和unicode字符串,默认为普通字符串,其中普通字符串即为引号包围的字符串,unicode字符串需要在字符串前加前缀u。python3中字符串只有str一种类型,与python2中unicode类型几乎一样,同时增加了字节串bytes。普通字符串前加上字母b作为前缀,就表示bytes字节串。

2、转义字符串

在Python中如果要在字符串中包含控制字符或特殊含义的字符,就需要使用转义字符。Python用反斜杠(\)转义字符。如下所示:

转义字符

描述

\(在行尾时)

续行符

\\

反斜杠符号

\'

单引号

\"

双引号

\a

响铃

\b

退格(Backspace)

\e

转义

\000

\n

换行

\v

纵向制表符

\t

横向制表符

\r

回车

\f

换页

\oyy

八进制数,yy代表的字符,例如:\o12代表换行

\xyy

十六进制数,yy代表的字符,例如:\x0a代表换行

\other

其它的字符以普通格式输出

3、原始字符串

原始字符串,顾名思义,就是保留原始字符的意思,不对反斜杠及反斜杠后面的字符进行转义。原始字符串是在字符串前以r或R为标志。在原始字符串里,所有的字符都是直接按照字面的意思来使用,没有转义特殊或不能打印的字符。

>>> s1 = 'a\nb'
>>> print(s1)
a
b
>>> s2 = r'a\nb'
>>> print(s2)
a\nb

4、格式化字符串

        Python 支持格式化字符串的输出 。基本的用法是将一个值插入到一个有字符串格式符 %s 的字符串中。字符串格式化使用字符串格式化操作符即百分号%来实现。在%左侧放置一个字符串(格式化字符串),而右侧则放置希望格式化的值(可以是元组或字典等)。

基本的转换说明符包含以下部分,注意其中的顺序:、

%字符:标记转换说明符的开始

转换标识(可选):-表示左对齐;+表示在转换值之前要加上正负号;""空白字符表示正数之前保留空格;0表示转换值若位数不够则用0填充

最小字段宽度(可选):转换后的字符串至少应该具有该值指定的宽度。如果是*,则宽度会从值元组中读出

点(.)后跟精度值(可选):如果转换的是实数,精度值就表示出现在小数点后的位数。如果转换的是字符串,那么该数字就表示最大字段宽度。如果是*,那么精度将会从元组中读出。

转换类型,详见下表:

符   号

描述

      %c

 格式化字符及其ASCII码

      %s

 格式化字符串

      %d

 格式化整数

      %u

 格式化无符号整型

      %o

 格式化无符号八进制数

      %x

 格式化无符号十六进制数

      %X

 格式化无符号十六进制数(大写)

      %f

 格式化浮点数字,可指定小数点后的精度

      %e

 用科学计数法格式化浮点数

      %E

 作用同%e,用科学计数法格式化浮点数

      %g

 %f和%e的简写

      %G

 %f 和 %E 的简写

      %p

 用十六进制数格式化变量的地址

5、字符串内建函数

方法

描述

string.capitalize()

把字符串的第一个字符大写

string.casefold()

将字符串转换成小写

string.center(width)

返回一个原字符串居中,并使用空格填充至长度 width 的新字符串

string.count(str, beg=0, end=len(string))

返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数

string.decode(encoding='UTF-8', errors='strict')

以 encoding 指定的编码格式解码 string,如果出错默认报一个 ValueError 的 异 常 , 除 非 errors 指 定 的 是 'ignore' 或 者'replace'

string.encode(encoding='UTF-8', errors='strict')

以 encoding 指定的编码格式编码 string,如果出错默认报一个ValueError 的异常,除非 errors 指定的是'ignore'或者'replace'

string.endswith(obj, beg=0, end=len(string))

检查字符串是否以 obj 结束,如果beg 或者 end 指定则检查指定的范围内是否以 obj 结束,如果是,返回 True,否则返回 False.

string.expandtabs(tabsize=8)

把字符串 string 中的 tab 符号转为空格,tab 符号默认的空格数是 8。

string.find(str, beg=0, end=len(string))

检测 str 是否包含在 string 中,如果 beg 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回-1

string.format()

格式化字符串

string.format_map(str,mapping)

格式化字符串

string.index(str, beg=0, end=len(string))

跟find()方法一样,只不过如果str不在 string中会报一个异常.

string.isalnum()

如果 string 至少有一个字符并且所有字符都是字母或数字则返

回 True,否则返回 False

string.isalpha()

如果 string 至少有一个字符并且所有字符都是字母则返回 True,

否则返回 False

string.isdecimal()

如果 string 只包含十进制数字则返回 True 否则返回 False.

string.isdigit()

如果 string 只包含数字则返回 True 否则返回 False.

string.islower()

如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回 False

string.isnumeric()

如果 string 中只包含数字字符,则返回 True,否则返回 False

string.isspace()

如果 string 中只包含空格,则返回 True,否则返回 False.

string.istitle()

如果 string 是标题化的(见 title())则返回 True,否则返回 False

string.isupper()

如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False

string.join(seq)

以 string 作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串

string.ljust(width)

返回一个原字符串左对齐,并使用空格填充至长度 width 的新字符串

string.lower()

转换 string 中所有大写字符为小写.

string.lstrip()

截掉 string 左边的空格

string.maketrans(intab, outtab])

maketrans() 方法用于创建字符映射的转换表,对于接受两个参数的最简单的调用方式,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标。

max(str)

返回字符串 str 中最大的字母。

min(str)

返回字符串 str 中最小的字母。

string.partition(str)

有点像 find()和 split()的结合体,从 str 出现的第一个位置起,把 字 符 串 string 分 成 一 个 3 元 素 的 元 组 (string_pre_str,str,string_post_str),如果 string 中不包含str 则 string_pre_str == string.

string.replace(str1, str2,  num=string.count(str1))

把 string 中的 str1 替换成 str2,如果 num 指定,则替换不超过 num 次.

string.rfind(str, beg=0,end=len(string) )

类似于 find()函数,不过是从右边开始查找.

string.rindex( str, beg=0,end=len(string))

类似于 index(),不过是从右边开始.

string.rjust(width)

返回一个原字符串右对齐,并使用空格填充至长度 width 的新字符串

string.rpartition(str)

类似于 partition()函数,不过是从右边开始查找.

string.rstrip()

删除 string 字符串末尾的空格.

string.split(str="", num=string.count(str))

以 str 为分隔符切片 string,如果 num有指定值,则仅分隔 num 个子字符串

string.splitlines(num=string.count('\n'))

按照行分隔,返回一个包含各行作为元素的列表,如果 num 指定则仅切片 num 个行.

string.startswith(obj, beg=0,end=len(string))

检查字符串是否是以 obj 开头,是则返回 True,否则返回 False。如果beg 和 end 指定值,则在指定范围内检查.

string.strip([obj])

在 string 上执行 lstrip()和 rstrip()

string.swapcase()

翻转 string 中的大小写

string.title()

返回"标题化"的 string,就是说所有单词都是以大写开始,其余字母均为小写(见 istitle())

string.translate(str, del="")

根据 str 给出的表(包含 256 个字符)转换 string 的字符,

要过滤掉的字符放到 del 参数中

string.upper()

转换 string 中的小写字母为大写

string.zfill(width)

返回长度为 width 的字符串,原字符串 string 右对齐,前面填充0

6、字符串基本操作

(1)字符串修改

字符串是不可修改的,这点很重要!你可以把它想象为字符组成的元组。

>>> s = 'Python'
>>> s[0] = 'p'
Traceback (most recent call last):
  File "<pyshell#21>", line 1, in <module>
    s[0] = 'p'

TypeError: 'str' object does not support item assignment

如果你想修改它,可以先转换成列表,修改完成后再转为字符串。

>>> l = list(s)
>>> l
['P', 'y', 't', 'h', 'o', 'n']
>>> l[0] = 'p'
>>> ''.join(l)
'python'

(2)字符串拼接

>>> s1 = 'python'
>>> s2 = 'str'
>>> s1 += s2
>>> s1
'pythonstr'

(3)字符串查找

string.find(str, beg=0, end=len(string))

检测 str 是否包含在 string 中,如果 beg 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回-1

string.index(str, beg=0, end=len(string))

跟find()方法一样,只不过如果str不在 string中会报一个异常.

string.rfind(str, beg=0,end=len(string) )

类似于 find()函数,不过是从右边开始查找.

string.rindex( str, beg=0,end=len(string))

类似于 index(),不过是从右边开始.

>>> s = 'Helloworld'
>>> s.find('l')
2
>>> s.index('l')
2
>>> s.find('h')
-1
>>> s.index('h')
Traceback (most recent call last):
  File "<pyshell#41>", line 1, in <module>
    s.index('h')
ValueError: substring not found
>>> s.rfind('l')
8

(4)统计字符串出现次数

string.count(str, beg=0, end=len(string))

返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数

>>> s = 'Hello world'
>>> s.count('l')
3
>>> s.count('l',2,5)

(5)将tab转换为空格

string.expandtabs(tabsize=8)

把字符串 string 中的 tab 符号转为空格,tab 符号默认的空格数是 8。

>>> s = 'python\tjava\tc'
>>> s
'python\tjava\tc'
>>> s.expandtabs()
'python  java    c'

(6)字符串组合

string.join(seq)

以 string 作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串

>>> seq = ['python','java','c']
>>> ''.join(seq)
'pythonjavac'
>>> '-'.join(seq)
'python-java-c'

(7)字符串移除

strip() 方法用于移除字符串头尾指定的字符(默认为空格)

string.strip([obj])

在 string 上执行 lstrip()和 rstrip()

string.lstrip()

截掉 string 左边的空格

string.rstrip()

删除 string 字符串末尾的空格.

>>> s = '  python '
>>> s.strip()
'python'
>>> s.lstrip()
'python '
>>> s1 = '--python--'
>>> s1.strip('-')
'python'

(8)字符串替换

string.replace(str1, str2,  num=string.count(str1))

把 string 中的 str1 替换成 str2,如果 num 指定,则替换不超过 num 次.

 

>>> s = "this is string example....wow!!! this is really string"
>>> s.replace('is','was')
'thwas was string example....wow!!! thwas was really string'
>>> s.replace('is','was',3)
'thwas was string example....wow!!! thwas is really string'

(9)字符串转换

 translate() 方法根据参数table给出的表(包含 256 个字符)转换字符串的字符, 要过滤掉的字符放到 del 参数中。

translate()方法语法:

str.translate(table[, deletechars]);

其中table -- 翻译表,翻译表是通过maketrans方法转换而来,deletechars -- 字符串中要过滤的字符列表。

string.maketrans(intab, outtab])

maketrans() 方法用于创建字符映射的转换表,对于接受两个参数的最简单的调用方式,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标。

string.translate(str, del="")

根据 str 给出的表(包含 256 个字符)转换 string 的字符,

要过滤掉的字符放到 del 参数中

>>> s = 'this is string example...'
>>> trantab = str.maketrans('aeiou','12345')
>>> s.translate(trantab)
'th3s 3s str3ng 2x1mpl2...'

(10)字符串分隔

string.split(str="", num=string.count(str))

以 str 为分隔符切片 string,如果 num有指定值,则仅分隔 num 个子字符串

string.splitlines(num=string.count('\n'))

splitlines() 按照行('\r', '\r\n', \n')分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。如果 num 指定则仅切片 num 个行.

string.partition(str)

有点像 find()和 split()的结合体,从 str 出现的第一个位置起,把 字 符 串 string 分 成 一 个 3 元 素 的 元 组 (string_pre_str,str,string_post_str),如果 string 中不包含str 则 string_pre_str == string.

string.rpartition(str)

类似于 partition()函数,不过是从右边开始查找.

>>> s = 'python java c'
>>> s.split()
['python', 'java', 'c']
>>> s.split(' ',1)
['python', 'java c']
>>> s1 = 'python\njava\r\nc'
>>> s1
'python\njava\r\nc'
>>> s1.splitlines()
['python', 'java', 'c']
>>> s2 = 'fhaslqer@126.com'
>>> s2.partition('@')
('fhaslqer', '@', '126.com')

(11)字符串测试、判断函数

string.startswith(obj, beg=0,end=len(string))

检查字符串是否是以 obj 开头,是则返回 True,否则返回 False。如果beg 和 end 指定值,则在指定范围内检查.

string.endswith(obj, beg=0, end=len(string))

检查字符串是否以 obj 结束,如果beg 或者 end 指定则检查指定的范围内是否以 obj 结束,如果是,返回 True,否则返回 False.

string.isalnum()

如果 string 至少有一个字符并且所有字符都是字母或数字则返

回 True,否则返回 False

string.isalpha()

如果 string 至少有一个字符并且所有字符都是字母则返回 True,

否则返回 False

string.isdecimal()

如果 string 只包含十进制数字则返回 True 否则返回 False.

string.isdigit()

如果 string 只包含数字则返回 True 否则返回 False.

string.islower()

如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回 False

string.isnumeric()

如果 string 中只包含数字字符,则返回 True,否则返回 False

string.isspace()

如果 string 中只包含空格,则返回 True,否则返回 False.

string.istitle()

如果 string 是标题化的(见 title())则返回 True,否则返回 False

string.isupper()

如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False

>>> s = 'This is string example...'
>>> s.startswith('this')
False
>>> s.endswith('...')
True
>>> s.isalnum()
False
>>> s.islower()
False
>>> s.isupper()
False

(12)字符串对齐

string.center(width)

返回一个原字符串居中,并使用空格填充至长度 width 的新字符串

string.ljust(width)

返回一个原字符串左对齐,并使用空格填充至长度 width 的新字符串

string.rjust(width)

返回一个原字符串右对齐,并使用空格填充至长度 width 的新字符串

string.zfill(width)

返回长度为 width 的字符串,原字符串 string 右对齐,前面填充0

>>> s = 'python'
>>> s.center(10)
'  python  '
>>> s.center(10,'*')
'**python**'
>>> s.ljust(10,'-')
'python----'
>>> s.rjust(10)
'    python'
>>> s.zfill(10)
'0000python'

(13)字符串大小写转换

string.capitalize()

把字符串的第一个字符大写

string.casefold()

将字符串转换成小写

string.lower()

转换 string 中所有大写字符为小写.

string.upper()

转换 string 中的小写字母为大写

string.swapcase()

翻转 string 中的大小写

string.title()

返回"标题化"的 string,就是说所有单词都是以大写开始,其余字母均为小写(见 istitle())

>>> s = 'This is string example...'
>>> s.lower()
'this is string example...'
>>> s.upper()
'THIS IS STRING EXAMPLE...'
>>> s.swapcase()
'tHIS IS STRING EXAMPLE...'
>>> s.title()
'This Is String Example...'

(14)格式化字符串

string.format()

格式化字符串

string.format_map(str,mapping)

格式化字符串

>>> '{},{}'.format('kuenen',22)
'kuenen,22'
>>> '{1},{0},{0}'.format('kuenen','22')
'22,kuenen,kuenen'
>>> People={
       'name':['john','peter'],
       'age':[56,64]
       }
>>> 'My name is {name[0]},i am {age[0]} old'.format_map(People)
'My name is john,i am 56 old'

(15)字符串编码与解码

Python 3的默认编码方式是UTF-8

>>> import sys
>>> sys.getdefaultencoding()
'utf-8'

在使用Python以二进制的形式写入文件时,需要先将字符串编码成字节串,然后再写入文件。以二进制的形式读取文件时也是如此,需要将读取的字节串解码成字符串。

>>> s = 'python'
>>> s.encode()
b'python'
>>> s1 = '我爱python'
>>> s1_bytes = s1.encode()
>>> s1_bytes
b'\xe6\x88\x91\xe7\x88\xb1python'
>>> s1_bytes.decode()
'我爱python'

 

参考文档:

 <http://blog.csdn.net/jcjc918/article/details/9368561>

 <http://blog.csdn.net/jcjc918/article/details/9368561>

 <http://www.runoob.com/python/python-strings.html>

 <http://www.cnblogs.com/IPrograming/p/Python_string.html

 

posted @ 2016-10-18 16:06  kuenen  阅读(1877)  评论(0编辑  收藏  举报