Python中的文本序列类型
Python中的文本数据由str对象或字符串进行处理。
1.字符串
字符串是Unicode码值的不可变序列。字符串字面量有多种形式:
单引号:'允许嵌入"双"引号'
双引号:"允许嵌入'单'引号"
三引号:'''三个单引号''', """三个双引号"""
说明:
a) 三引号的字符串可以跨越多行,所关联的空格将包含在字符串文字中;
b) 字符串也可以使用str构建函数从其他对象创建;
c) 因为没有单独的“字符”类型,因此索引字符串将产生长度为1的字符串。也就是说,对于非空字符串s,s[0] == s[0:1];
d) 没有可变的字符串类型,但是str.join()或io.StringIO可以用于从多个片断有效地构造字符串;
e) 字符串中可以是用反斜线"\"对特殊字符进行转义,也可以在字符串字面上使用"r"前缀来取消转义;
f) Python 3.3中的修改:为了向后兼容Python 2系列,在字符串字面上再次允许使用"u"前缀,但是它对字符串文字的含义没有影响,也不能与"r"前缀组合使用;
g) 作为单个表达式的一部分并且在它们之间只有空格的字符串文字将被隐式转换为单个字符串文字。也就是说("spam""eggs") == "spam eggs";
2.str类
str类构建方法
class str(object='')
class str(object=b'', encoding='utf-8', errors='strict')
str类的构建方法返回对象的字符串版本。如果未提供对象参数,则返回空字符串。否则,str()的行为取决于是否给出了encoding和errors参数,如下所示:
如果既没有给出encoding也没有给出errors参数,str(object)将会返回object.__str__()的值,这是object的“非正式”或可打印的字符串表示。对于字符串对象,这是字符串本身。如果该object没有__str__()方法,那么str()将会返回repr(object)的结果值。
如果给出了encoding或errors两个参数中的至少一个,则object应该是类似于字节的对象(例如bytes或bytearray)。在这种情况下,如果object是bytes(或 bytearray)对象,则str(bytes,encoding,errors)等价于bytes.decode(encoding, errors)。
将字节对象传递给str()而不使用encoding或errors参数属于返回非正式字符串表示形式的第一种情况。
str构建示例
>>> 'Hello, World!' # 单引号
'Hello, World!'
>>> "Hello, World!" # 双引号
'Hello, World!'
>>> """ # 三引号,多行
... Hello,
... World!
... """
'\nHello,\nWorld!\n'
>>> "Hello, \"World!\"" # 使用转义
'Hello, "World!"'
>>> str() # 不给出object参数,返回空字符串
''
>>> str("Hello, World!") # 给出object参数,但不给出encoding和errors
'Hello, World!'
>>> str(b"Hello, World!")
"b'Hello, World!'"
>>> str(b"Hello, World!", encoding='utf-8') # 给出object参数,也给出encoding参数
'Hello, World!'
3.文本序列支持的操作
由于文本序列是一个特殊的(专门处理文本)不可变序列,因此它不支持可变序列特有的操作,但是它支持所有的序列通用操作。下面介绍下str支持的除序列通用操作外的其他方法:
# 返回一个将字符串居中的指定长度的字符串,填充部分使用fillchar指定的字符来完成(默认为ASCII空格)。如果width小于或等于len(s),则返回原始字符串
str.center(width[,fillchar])
# 与center()方法类似,只是字符串位于左边, 填充字符位于右边
str.ljust(width[,fillchar])
# 与center()方法类似,只是字符串位于右边,填充字符位于左边
str.rjust