字符串的定义
字符串 就是⼀串字符,是编程语⾔中表示⽂本的数据类型,在 Python 中可以使⽤ ⼀对双引号 " 或者 ⼀对单引号 ' 定义⼀个字符串
虽然可以使⽤ \" 或者 \' 做字符串的转义,但是在实际开发中:
- 如果字符串内部需要使⽤ " ,可以使⽤ ' 定义字符串
- 如果字符串内部需要使⽤ ' ,可以使⽤ " 定义字符串
可以使⽤ 索引 获取⼀个字符串中 指定位置的字符,索引计数从 0 开始
也可以使⽤ for 循环遍历 字符串中每⼀个字符
⼤多数编程语⾔都是⽤ " 来定义字符串
string = "Hello Python"
for c in string:
print(c)
字符串的常⽤操作
1) 判断
⽅法说明:
- string.isalpha() 如果 string ⾄少有⼀个字符并且所有字符都是字⺟则返回 True
- string.isdecimal() 如果 string 只包含数字则返回 True
- string.islower() 如果 string 中包含⾄少⼀个区分⼤⼩写的字符,并且所有这些(区分⼤⼩写的)字符都是⼩写,则返回 True
- string.isupper() 如果 string 中包含⾄少⼀个区分⼤⼩写的字符,并且所有这些(区分⼤⼩写的)字符都是⼤写,则返回 True
- string.startswith(str) 检查字符串是否是以 str 开头,是则返回 True
- string.endswith(str) 检查字符串是否是以 str 结束,是则返回 True
2) 查找和替换
⽅法说明:
- string.find(str, start=0,
- end=len(string))
检测 str 是否包含在 string 中,如果 start 和 end 指定范围,则检查是否包含
在指定范围内,如果是返回开始的索引值,否则返回 -1
- string.rfind(str, start=0,
- end=len(string)) 类似于 find(),不过是从右边开始查找
- string.index(str, start=0,
- end=len(string)) 跟 find() ⽅法类似,不过如果 str 不在 string 会报错
- string.rindex(str, start=0,
- end=len(string)) 类似于 index(),不过是从右边开始
- string.replace(old_str, new_str, num=string.count(old))
返回⼀个新字符串,把 string 中的 old_str 替换成 new_str,如果 num 指定,则替换不超过 num 次
3) 拆分和连接
⽅法说明 :
- string.partition(str) 返回元组,把字符串 string 分成⼀个 3 元素的元组 (str前⾯, str, str后⾯)
- string.rpartition(str) 类似于 partition() ⽅法,不过是从右边开始查找
- string.split(str="",num)
返回列表,以 str 为分隔符拆分 string,如果 num 有指定值,则仅分隔 num + 1 个⼦字符
串,str 默认包含 '\r', '\t', '\n' 和空格
- string.splitlines() 返回列表,按照⾏('\r', '\n', '\r\n')分隔
- string1 + string2 拼接两个字符串
- string.join(seq) 返回字符串,以 string 作为分隔符,将 seq 中所有的元素(的字符串表示)合并为⼀个新的字符串
4) ⼤⼩写转换
⽅法说明:
- string.lower() 返回新字符串,转换 string 中所有⼤写字符为⼩写
- string.upper() 返回新字符串,转换 string 中的⼩写字⺟为⼤写
5) ⽂本对⻬
⽅法说明:
- string.ljust(width) 返回新字符串,基于原字符串左对⻬,并使⽤空格填充⾄⻓度 width
- string.rjust(width) 返回新字符串,基于原字符串右对⻬,并使⽤空格填充⾄⻓度 width
- string.center(width) 返回新字符串,基于原字符串居中,并使⽤空格填充⾄⻓度 width
6) 去除空⽩字符
⽅法说明:
- string.lstrip() 返回新字符串,截掉 string 左边(开始)的空⽩字符
- string.rstrip() 返回新字符串,截掉 string 右边(末尾)的空⽩字符
- string.strip() 返回新字符串,截掉 string 左右两边的空⽩字符
提示:列表除了查询⽅法和pop⽅法都没有返回值,字符串所有⽅法都有返回值
字符串的切⽚
- 切⽚ 译⾃英⽂单词 slice ,翻译成另⼀个解释更好理解: ⼀部分
- 切⽚ 使⽤ 索引值 来限定范围,根据 步⻓ 从原序列中 取出⼀部分 元素组成新序列
- 切⽚ ⽅法适⽤于 字符串、列表、元组
字符串[开始索引:结束索引:步⻓]
注意:
- 1. 指定区间属于 左闭右开 型 [开始索引, 结束索引) ,从起始位开始,到结束位的前⼀位结束(不包含结束位本身)。
- 2. 从头开始,开始索引 数字可以省略,冒号不能省略 。
- 3. 到末尾结束,结束索引 数字和冒号都可以省略 。
- 4. 步⻓默认为 1 ,如果元素连续,数字和冒号都可以省略 。
索引的顺序和倒序 :
- 在 Python 中不仅⽀持 顺序索引,同时还⽀持 倒序索引
- 所谓倒序索引就是 从右向左 计算索引
- 最右边的索引值是 -1,依次递减
注意:如果 步⻓为负数,
- 并省略了开始索引,则开始索引表示最后⼀位 。
- 并省略了结束索引,则结束索引表示第⼀位 。
练习:
num_str = "0123456789"
1. 截取从 2 ~ 5 位置 的字符串
2. 截取从 2 ~ 末尾 的字符串
3. 截取从 开始 ~ 5 位置 的字符串
4. 截取完整的字符串
5. 从开始位置,每隔⼀个字符截取字符串
6. 从索引 1 开始,每隔⼀个取⼀个
7. 截取从 2 ~ 末尾 - 1 的字符串
8. 截取字符串末尾两个字符
9. 字符串的逆序(⾯试题)
答案:
num_str = "0123456789"
# 1. 截取从 2 ~ 5 位置 的字符串
print(num_str[2:6])
# 2. 截取从 2 ~ `末尾` 的字符串
print(num_str[2:])
# 3. 截取从 `开始` ~ 5 位置 的字符串
print(num_str[:6])
# 4. 截取完整的字符串
print(num_str[:])
# 5. 从开始位置,每隔⼀个字符截取字符串
print(num_str[::2])
# 6. 从索引 1 开始,每隔⼀个取⼀个
print(num_str[1::2])
# 倒序切⽚
# -1 表示倒数第⼀个字符
print(num_str[-1])
# 7. 截取从 2 ~ `末尾 - 1` 的字符串
print(num_str[2:-1])
# 8. 截取字符串末尾两个字符
print(num_str[-2:])
# 9. 字符串的逆序(⾯试题)
print(num_str[::-1])
Python 字符串格式化
Python 支持格式化字符串的输出 。尽管这样可能会用到非常复杂的表达式,但最基本的用法是将一个值插入到一个有字符串格式符 %s 的字符串中。
在 Python 中,字符串格式化使用与 C 中 sprintf 函数一样的语法。
如下实例:
print "My name is %s and weight is %d kg!" % ('Zara', 21)
以上实例输出结果:
My name is Zara and weight is 21 kg!
python字符串格式化符号:
符 号 | 描述 |
---|---|
%c | 格式化字符及其ASCII码 |
%s | 格式化字符串 |
%d | 格式化整数 |
%u | 格式化无符号整型 |
%o | 格式化无符号八进制数 |
%x | 格式化无符号十六进制数 |
%X | 格式化无符号十六进制数(大写) |
%f | 格式化浮点数字,可指定小数点后的精度 |
%e | 用科学计数法格式化浮点数 |
%E | 作用同%e,用科学计数法格式化浮点数 |
%g | %f和%e的简写 |
%G | %f 和 %E 的简写 |
%p | 用十六进制数格式化变量的地址 |
格式化操作符辅助指令:
符号 | 功能 |
---|---|
* | 定义宽度或者小数点精度 |
- | 用做左对齐 |
+ | 在正数前面显示加号( + ) |
<sp> | 在正数前面显示空格 |
# | 在八进制数前面显示零('0'),在十六进制前面显示'0x'或者'0X'(取决于用的是'x'还是'X') |
0 | 显示的数字前面填充'0'而不是默认的空格 |
% | '%%'输出一个单一的'%' |
(var) | 映射变量(字典参数) |
m.n. | m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话) |
Python2.6 开始,新增了一种格式化字符串的函数 str.format(),它增强了字符串格式化的功能。
Python三引号(triple quotes)
python中三引号可以将复杂的字符串进行复制:
python三引号允许一个字符串跨多行,字符串中可以包含换行符、制表符以及其他特殊字符。
三引号的语法是一对连续的单引号或者双引号(通常都是成对的用)。
>>> hi = '''hi
there'''
>>> hi # repr()
'hi\nthere'
>>> print hi # str()
hi
there
三引号让程序员从引号和特殊字符串的泥潭里面解脱出来,自始至终保持一小块字符串的格式是所谓的WYSIWYG(所见即所得)格式的。
一个典型的用例是,当你需要一块HTML或者SQL时,这时用字符串组合,特殊字符串转义将会非常的繁琐。
errHTML = '''
<HTML><HEAD><TITLE>
Friends CGI Demo</TITLE></HEAD>
<BODY><H3>ERROR</H3>
<B>%s</B><P>
<FORM><INPUT TYPE=button VALUE=Back
ONCLICK="window.history.back()"></FORM>
</BODY></HTML>
'''
cursor.execute('''
CREATE TABLE users (
login VARCHAR(8),
uid INTEGER,
prid INTEGER)
''')
Unicode 字符串
Python 中定义一个 Unicode 字符串和定义一个普通字符串一样简单:
>>> u'Hello World !'
u'Hello World !'
引号前小写的"u"表示这里创建的是一个 Unicode 字符串。如果你想加入一个特殊字符,可以使用 Python 的 Unicode-Escape 编码。如下例所示:
>>> u'Hello\u0020World !'
u'Hello World !'
被替换的 \u0020 标识表示在给定位置插入编码值为 0x0020 的 Unicode 字符(空格符)。
Python的字符串内建函数
字符串方法是从python1.6到2.0慢慢加进来的——它们也被加到了Jython中。
这些方法实现了string模块的大部分方法,如下表所示列出了目前字符串内建支持的方法,所有的方法都包含了对Unicode的支持,有一些甚至是专门用于Unicode的。
方法 | 描述 |
---|---|
把字符串的第一个字符大写 | |
返回一个原字符串居中,并使用空格填充至长度 width 的新字符串 | |
返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数 | |
以 encoding 指定的编码格式解码 string,如果出错默认报一个 ValueError 的 异 常 , 除非 errors 指 定 的 是 'ignore' 或 者'replace' | |
以 encoding 指定的编码格式编码 string,如果出错默认报一个ValueError 的异常,除非 errors 指定的是'ignore'或者'replace' | |
检查字符串是否以 obj 结束,如果beg 或者 end 指定则检查指定的范围内是否以 obj 结束,如果是,返回 True,否则返回 False. | |
把字符串 string 中的 tab 符号转为空格,tab 符号默认的空格数是 8。 | |
检测 str 是否包含在 string 中,如果 beg 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回-1 | |
格式化字符串 | |
跟find()方法一样,只不过如果str不在 string中会报一个异常. | |
如果 string 至少有一个字符并且所有字符都是字母或数字则返 回 True,否则返回 False | |
如果 string 至少有一个字符并且所有字符都是字母则返回 True, 否则返回 False | |
如果 string 只包含十进制数字则返回 True 否则返回 False. | |
如果 string 只包含数字则返回 True 否则返回 False. | |
如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回 False | |
如果 string 中只包含数字字符,则返回 True,否则返回 False | |
如果 string 中只包含空格,则返回 True,否则返回 False. | |
如果 string 是标题化的(见 title())则返回 True,否则返回 False | |
如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False | |
以 string 作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串 | |
返回一个原字符串左对齐,并使用空格填充至长度 width 的新字符串 | |
转换 string 中所有大写字符为小写. | |
截掉 string 左边的空格 | |
maketrans() 方法用于创建字符映射的转换表,对于接受两个参数的最简单的调用方式,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标。 | |
返回字符串 str 中最大的字母。 | |
返回字符串 str 中最小的字母。 | |
有点像 find()和 split()的结合体,从 str 出现的第一个位置起,把 字 符 串 string 分 成 一 个 3 元 素 的 元 组 (string_pre_str,str,string_post_str),如果 string 中不包含str 则 string_pre_str == string. | |
把 string 中的 str1 替换成 str2,如果 num 指定,则替换不超过 num 次. | |
类似于 find()函数,不过是从右边开始查找. | |
类似于 index(),不过是从右边开始. | |
返回一个原字符串右对齐,并使用空格填充至长度 width 的新字符串 | |
类似于 partition()函数,不过是从右边开始查找 | |
删除 string 字符串末尾的空格. | |
以 str 为分隔符切片 string,如果 num有指定值,则仅分隔 num 个子字符串 | |
按照行('\r', '\r\n', \n')分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。 | |
检查字符串是否是以 obj 开头,是则返回 True,否则返回 False。如果beg 和 end 指定值,则在指定范围内检查. | |
在 string 上执行 lstrip()和 rstrip() | |
翻转 string 中的大小写 | |
返回"标题化"的 string,就是说所有单词都是以大写开始,其余字母均为小写(见 istitle()) | |
根据 str 给出的表(包含 256 个字符)转换 string 的字符, 要过滤掉的字符放到 del 参数中 | |
转换 string 中的小写字母为大写 | |
返回长度为 width 的字符串,原字符串 string 右对齐,前面填充0 |