Python中处理文本数据使用由Unicode编码构成的不可变序列字符串—str对象。字符串表达形式如下:
.单引号 ‘This article describes information about str object’
.双引号 “This article describes information about str object”
.三重引号 ‘’‘ This article describes information about str object’’’
使用三重引号的字符串可以跨越多行,并且所有的空字符串都包含在字符串值中。
str类型同样是不可变类型,除了上面三种显式构建方式之外,也同样有构建函数进行构建
字符串构建
构建函数:
函数 | 释义 |
---|---|
str(object=b’’) | 返回构建的字符串 |
str(object=’’, encoding=’uft-8’, errors=’strict’) | 返回由object构成的字符串,若object为空,则返回空字符串,如果encoding或errors均未设置str(object) 返回 object.__str__() ,这是 object 的“非正式”或格式良好的字符串表示。 对于字符串对象,这是该字符串本身。 如果 object 没有 __str__() 方法,则 str() 将回退为返回 repr(object) 。如果 encoding 或 errors至少给出其中之一,则 object 应该是一个 bytes-like object (例如 bytes 或 bytearray )。 在此情况下,如果 object 是一个 bytes (或 bytearray ) 对象,则 str(bytes, encoding, errors) 等价于 bytes.decode(encoding, errors) 。 否则的话,会在调用 bytes.decode() 之前获取缓冲区对象下层的 bytes 对象。 请参阅 二进制序列类型 — bytes, bytearray, memoryview 与 缓冲协议 了解有关缓冲区对象的信息。 |
io.StringIO() | Text I/O内存缓冲区,若调用close()方法则缓冲区结束 |
>>> str(b'Zoot!')
"b'Zoot!'"
字符串访问
可以直接通过index的方式访问字符串中的字符,如字符串s = ‘abcdfdeff’, s[0] = ‘a’, s[0:3]=’abc’, s[0:3]也可以写成s[:3],代表从0个位置开始,取第3个字符之前的字节,第一个数字代表从第几个字符开始,:后面代表取到第几个字节(最后一个字节的字符不包含在内)。
因为不存在单独的字符类型,对字符串做索引操作的时候会产生长度为1的字符串,即s[0] == s[0:1]
字面值
字符串的字面值定义如下:
stringliteral ::= [stringprefix](shortstring | longstring)
stringprefix ::= "r" | "u" | "R" | "U" | "f" | "F"
| "fr" | "Fr" | "fR" | "FR" | "rf" | "rF" | "Rf" | "RF"
shortstring ::= "'" shortstringitem* "'" | '"' shortstringitem* '"'
longstring ::= "'''" longstringitem* "'''" | '"""' longstringitem* '"""'
shortstringitem ::= shortstringchar | stringescapeseq
longstringitem ::= longstringchar | stringescapeseq
shortstringchar ::= <any source character except "\" or newline or the quote>
longstringchar ::= <any source character except "\">
stringescapeseq ::= "\" <any source character>
bytesliteral ::= bytesprefix(shortbytes | longbytes)
bytesprefix ::= "b" | "B" | "br" | "Br" | "bR" | "BR" | "rb" | "rB" | "Rb" | "RB"
shortbytes ::= "'" shortbytesitem* "'" | '"' shortbytesitem* '"'
longbytes ::= "'''" longbytesitem* "'''" | '"""' longbytesitem* '"""'
shortbytesitem ::= shortbyteschar | bytesescapeseq
longbytesitem ::= longbyteschar | bytesescapeseq
shortbyteschar ::= <any ASCII character except "\" or newline or the quote>
longbyteschar ::= <any ASCII character except "\">
bytesescapeseq ::= "\" <any ASCII character>
第一种字面值是描述str类型,第二种字面值是描述bytes类型。
如果字符串前面带有’b’或’B’ 等bytesprefix类型,则生成的是bytes类型;如果字符串前面带有’r’,’u’则生成的是str类型;如果字符串前面带有’r’或’R’,则代表字符串不会进行转义。
为了与 Python 2 系列的向下兼容,再次允许字符串字面值使用 u
前缀。 它对字符串字面值的含义没有影响,并且不能与 r
前缀同时出现。
转义序列&行边界
表示符 | 描述 |
---|---|
\n | 换行 |
\r | 回车 |
\r\n | 回车+换行 |
\v 或\x0b | 行制表符-纵向 |
\f或\x0c | 换表单 |
\x1c | 文件分隔符 |
\x1d | 组分隔符 |
\x1e | 记录分隔符 |
\x85 | 下一行 |
\u2018 | 行分隔符 |
\u2029 | 段分隔符 |
\ | 在行尾时为续行符 |
\ | 反斜扛符号 |
\’ | 单引号 |
\” | 双引号 |
\a | 响铃 |
\b | 退格(Backspace) |
\000 | 空 |
\t | 横向制表符 |
\o | 八进制数 |
\x | 十六进制数 |
\other | 其它的字符以普通格式输出 |
字面值拼接
多个相邻的字符串或字节串字面值 (以空白符分隔),所用的引号可以彼此不同,其含义等同于全部拼接为一体。因此, "hello" 'world'
等同于 "helloworld"
。此特性可以减少反斜杠的使用,以方便地将很长的字符串分成多个物理行,甚至每部分字符串还可分别加注释
字符串常量
字符串定义的常量有:
常量 | 描述 |
---|---|
ascii_letters | ascii_lowercase和asscii_uppercase的拼接组合 |
ascii_lowercase | 26个小写字母’abcdefghijklmnopqrstuvwxyz’,不依赖本地,不可改变 |
ascii_uppercase | 26个大写字母’ABCDEFGHIJKLMNOPQRSTUVWXYZ’,不依赖本地,不可改变 |
digits | 字符串 '0123456789' |
hexdigits | 字符串 '0123456789abcde |