Python 字符串


Strings are amongst the most popular types in Python. We can create them simply by enclosing characters in quotes. Python treats single quotes the same as double quotes. Creating strings is as simple as assigning a value to a variable. For example:

var1 = 'Hello World!'
var2 = "Python Programming"

访问字符串中的值


Python 不支持字符类型;这些被视为长度为 1 的字符串,因此也被视为子字符串。

要访问子字符串,请使用方括号进行切片以及索引或索引来获取子字符串。例如:

#!/usr/bin/python

var1 = 'Hello World!'
var2 = "Python Programming"

print "var1[0]: ", var1[0]
print "var2[1:5]: ", var2[1:5]

执行上述代码时,会产生如下结果:

var1[0]:  H
var2[1:5]:  ytho

更新字符串


你可以通过(重新)将变量分配给另一个字符串来“更新”现有字符串。新值可以与其先前的值相关,也可以与完全不同的字符串相关。例如:

#!/usr/bin/python

var1 = 'Hello World!'
print "Updated String :- ", var1[:6] + 'Python'

执行上述代码时,会产生如下结果:

Updated String :-  Hello Python

转义字符


下表是可以用反斜杠表示法表示的转义或不可打印字符的列表。

转义字符被解释;在单引号和双引号字符串中。

反斜杠符号 十六进制字符 描述
\a 0x07 响铃或警报
\b 0x08 退格
\cx 控制-x
\C-x 控制-x
\e 0x1b Escape
\f 0x0c Formfeed
\M-\C-x 元控制-x
\n 0x0a Newline
\nnn 八进制表示法,其中 n 在 0.7 范围内
\r 0x0d 回车
\s 0x20 Space
\t 0x09 Tab
\v 0x0b 垂直选项卡
\x 字符 x
\xnn 十六进制表示法,其中 n 在 0.9、a.f 或 A.F 范围内

String Special Operators


假设字符串变量 a 持有 'Hello' 和变量 b 持有'Python',则:

Operator 描述 例子
+ 串联 - 在运算符的任一侧添加值 a + b 会给 HelloPython
* 重复 - 创建新字符串,连接相同的多个副本 string a*2 将给出 -HelloHello
[] Slice - 给出给定索引中的字符 a[1] 会给 e
[ : ] Range Slice - 给出给定范围内的字符 a[1:4] 会给 ell
in Membership - 如果给定字符串中存在字符,则返回 true H in a 将给出 1
not in Membership - 如果给定字符串中不存在字符,则返回 true M not in a 将给出 1
r/R 原始字符串 - 抑制转义字符的实际含义。原始字符串的语法与普通字符串的语法完全相同,但原始字符串运算符除外,即引号前面的字母“r”。 “r”可以是小写字母 (r) 或大写字母 (R),并且必须紧挨在第一个引号之前。 print r'\n' 打印 \n 和 print R'\n' 打印 \n
% Format - 执行字符串格式化 见下一节

String Formatting Operator


Python 最酷的特性之一是字符串格式运算符 %。该运算符是字符串独有的,弥补了 C 的 printf() 系列中的函数包。下面是一个简单的例子:

#!/usr/bin/python

print "My name is %s and weight is %d kg!" % ('Zara', 21)

执行上述代码时,会产生如下结果:

My name is Zara and weight is 21 kg!

以下是可与 % 一起使用的完整符号集列表:

格式化符号 转换
%c 特点
%s 在格式化之前通过 str() 进行字符串转换
%i 有符号十进制整数
%d 有符号十进制整数
%u 无符号十进制整数
%o 八进制整数
%x 十六进制整数(小写字母)
%X 十六进制整数(大写字母)
%e 指数符号(带小写“e”)
%E 指数符号(大写“E”)
%f 浮点实数
%g %f 和 %e 中较短的一个
%G %f 和 %E 中较短的一个

其他支持的符号和功能如下表:

Symbol 功能性
* 参数指定宽度或精度
- 左对齐
+ 显示标志
在正数前留一个空格
# 添加八进制前导零(“0”)或十六进制前导“0x”或“0X”,具体取决于使用的是“x”还是“X”。
0 从左边用零填充(而不是空格)
% '%%' 给你留下一个文字 '%'
(var) 映射变量(字典参数)
m.n. m 是最小总宽度,n 是小数点后显示的位数(如果适用)

三重引号


Python 的三重引号允许字符串跨越多行,包括逐字换行符、制表符和任何其他特殊字符,从而起到救援作用。

三引号的语法由三个连续的 单人或双人 quotes.

#!/usr/bin/python

para_str = """this is a long string that is made up of
several lines and non-printable characters such as
TAB ( \t ) and they will show up that way when displayed.
NEWLINEs within the string, whether explicitly given like
this within the brackets [ \n ], or just a NEWLINE within
the variable assignment will also show up.
"""
print para_str

执行上述代码时,会产生以下结果。请注意每个特殊字符是如何转换为其打印形式的,一直到字符串末尾“up”之间的最后一个 NEWLINE。并关闭三重引号。另请注意,NEWLINE 出现在行尾有显式回车或其转义码 (\n):

this is a long string that is made up of
several lines and non-printable characters such as
TAB (    ) and they will show up that way when displayed.
NEWLINEs within the string, whether explicitly given like
this within the brackets [
 ], or just a NEWLINE within
the variable assignment will also show up.

原始字符串根本不将反斜杠视为特殊字符。你放入原始字符串的每个字符都保持你编写它的方式:

#!/usr/bin/python

print 'C:\\nowhere'

执行上述代码时,会产生如下结果:

C:\nowhere

现在让我们使用原始字符串。我们将表达式 r'表达式' 如下:

#!/usr/bin/python

print r'C:\\nowhere'

执行上述代码时,会产生如下结果:

C:\\nowhere

Unicode 字符串


Python 中的普通字符串在内部存储为 8 位 ASCII,而 Unicode 字符串存储为 16 位 Unicode。这允许使用更多样化的字符集,包括来自世界上大多数语言的特殊字符。我将对 Unicode 字符串的处理限制为以下内容:

#!/usr/bin/python

print u'Hello, world!'

执行上述代码时,会产生如下结果:

Hello, world!

如你所见,Unicode 字符串使用前缀 u,就像原始字符串使用前缀 r 一样。

内置字符串方法


Python 包含以下内置方法来操作字符串:

序号. 带有描述的方法
1 大写()

将字符串的第一个字母大写

2 中心(宽度,填充字符)

返回一个空格填充的字符串,其中原始字符串以总宽度列为中心。

3 计数(str,beg=0,end=len(字符串))

如果给定了起始索引 beg 和结束索引 end,则计算 str 在字符串或字符串的子字符串中出现的次数。

4 解码(编码='UTF-8',错误='严格')

使用为编码注册的编解码器对字符串进行解码。 encoding 默认为默认字符串编码。

5 编码(编码='UTF-8',错误='严格')

返回字符串的编码字符串版本;出错时,默认是引发 ValueError ,除非使用“忽略”或“替换”给出错误。

6 结束(后缀,乞求 = 0,结束 = 长度(字符串))

确定字符串或字符串的子字符串(如果给出了起始索引 beg 和结束索引 end)是否以后缀结尾;如果是,则返回 true,否则返回 false。

7 展开标签(标签大小=8)

将字符串中的制表符扩展到多个空格;如果未提供 tabsize,则默认为每个制表符 8 个空格。

8 查找(str,beg=0 end=len(字符串))

如果给出了起始索引 beg 和结束索引 end,则确定 str 出现在字符串中还是出现在字符串的子字符串中,如果找到则返回 index,否则返回 -1。

9 索引(str,beg=0,end=len(字符串))

与 find() 相同,但如果未找到 str,则会引发异常。

10 isalnum()

如果字符串至少有 1 个字符并且所有字符都是字母数字,则返回 true,否则返回 false。

11 是阿尔法()

如果字符串至少有 1 个字符并且所有字符都是字母,则返回 true,否则返回 false。

12 是数字()

如果字符串仅包含数字,则返回 true,否则返回 false。

13 下层()

如果字符串至少有 1 个大小写字符并且所有大小写字符都是小写,则返回 true,否则返回 false。

14 非数字()

如果 unicode 字符串仅包含数字字符,则返回 true,否则返回 false。

15 空间()

如果字符串仅包含空白字符,则返回 true,否则返回 false。

16 标题()

如果字符串正确“标题大小写”,则返回 true,否则返回 false。

17 isupper()

如果字符串至少有一个大小写字符并且所有大小写字符都是大写,则返回 true,否则返回 false。

18 加入(序列)

将序列 seq 中元素的字符串表示合并(连接)成一个字符串,并带有分隔符字符串。

19 长度(字符串)

返回字符串的长度

20 ljust(宽度[,填充字符])

返回一个空格填充的字符串,原始字符串左对齐到总宽度列。

21 lower()

将字符串中的所有大写字母转换为小写。

22 lstrip()

删除字符串中的所有前导空格。

23 maketrans()

返回要在翻译函数中使用的翻译表。

24 max(str)

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

25 min(str)

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

26 替换(旧,新 [,最大])

将字符串中所有出现的 old 替换为新的,或者如果给定 max,则最多替换为 max 出现。

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

与 find() 相同,但在字符串中向后搜索。

28 rindex(str,beg=0,end=len(字符串))

与 index() 相同,但在字符串中向后搜索。

29 rjust(宽度,[,填充字符])

返回一个空格填充的字符串,原始字符串右对齐到总宽度列。

30 rstrip()

删除字符串的所有尾随空格。

31 拆分(str="", num=string.count(str))

根据分隔符 str 拆分字符串(如果未提供空格)并返回子字符串列表;如果给定,最多拆分为 num 个子字符串。

32 分割线(num=string.count('\n'))

在所有(或 num)个 NEWLINE 处拆分字符串,并返回删除了 NEWLINE 的每一行的列表。

33 开始(str,beg=0,end=len(字符串))

确定字符串或字符串的子字符串(如果给出了起始索引 beg 和结束索引 end)是否以子字符串 str 开头;如果是,则返回 true,否则返回 false。

34 剥离([字符])

对字符串执行 lstrip() 和 rstrip()。

35 交换箱()

反转字符串中所有字母的大小写。

36 title()

返回“titlecased”版本的字符串,即所有单词都以大写开头,其余的都是小写。

37 翻译(表,删除字符=“”)

根据翻译表 str(256 chars) 翻译字符串,删除 del 字符串中的那些。

38 upper()

将字符串中的小写字母转换为大写。

39 zfill(宽度)

返回用零填充到总宽度字符的原始字符串;用于数字,zfill() 保留任何给定的符号(少一个零)。

40 十进制()

如果 unicode 字符串仅包含十进制字符,则返回 true,否则返回 false。