一、基本定义
String
(字符串)是 Python
中表示 文本 的数据类型- 字符串用单引号
''
或双引号 ""
括起来,也可以同时使用反斜杠 \
转义特殊字符
二、访问字符串中的值
- 不支持 单字符类型,单字符也是作为 一个 字符串使用
- 访问子字符串,可以使用 方括号
[]
来截取 字符串 - 两种 索引方式,从左往右以
0
开始,从右往左以 -1
开始 - 截取格式:变量[头下标:尾下标:步长]
str = "Hello Python"
print(str[0])
print(str[-2])
print(str[1:])
print(str[:5])
print(str[1:5])
print(str[0:6:2])
print(str[-1::-1])
print(str[::-1])
-> 1
-> 6
-> 234567
-> 12345
-> 2345
-> 135
-> 7654321
-> 7654321
三、字符串更新
- 字符串 不能 改变,但可以截取一部分并与其他字段 拼接
str = "Hello World!"
print(str[:6] + "Python!")
-> Hello Python!
四、转义字符
序号 | 符号 | 描述 |
---|
01 | \ | 续行符 (行尾) |
02 | \\ | 反斜杠 |
03 | \' | 单引号 |
04 | \" | 双引号 |
05 | \a | 响铃 |
06 | \b | 退格 |
07 | \e | 转义 |
08 | \0 | 空字符 |
09 | \n | 换行 |
10 | \v | 纵向制表符 |
11 | \t | 横向制表符 |
12 | \r | 回车 |
13 | \f | 换页 |
14 | \oyy | 八进制数,yy 代表字符,\o12 -> \n |
15 | \xyy | 十六进制数,yy 代表字符,\x0a -> \n |
16 | \other | 其它的字符以普通格式输出 |
五、字符串运算符
序号 | 符号 | 描述 |
---|
01 | + | 连接 字符串 |
02 | * | 重复 字符串 |
03 | [] | 通过索引 获取 子字符 |
04 | [:] | 截取 字符串中的一部分,遵循 左闭右开 原则 |
05 | in | 字符串中 包含 给定的字符返回 True ,否则返回 False |
06 | not in | 字符串中 不包含 给定的字符返回 True ,否则返回 False |
07 | r/R | 原始字符串 (raw string) ,print(r"Hello\nPython!") -> Hello\nPython! |
08 | u | 16位Unicode字符串,print(u"Unicode字符串") -> Unicode字符串 |
09 | % | 格式字符串 |
Explain:
- 在
Python 2.x
中,普通字符串是以 8位ASCII码
进行存储的,若要改为 16位unicode字符串
进行存储,只需在字符串前面加上前缀 u
即可 - 在
Python 3.x
中,所有字符串都是 16位Unicode字符串
,这样能够表示更多的字符集
六、字符串格式化
序号 | 符号 | 描述 |
---|
01 | %c | 格式化字符及其 ASCII码 |
02 | %s | 格式化 字符串 |
03 | %d | 格式化 整数 |
04 | %u | 格式化 无符号整型 |
05 | %o | 格式化 无符号八进制数 |
06 | %x | 格式化 无符号十六进制数 |
07 | %X | 格式化 无符号十六进制数 |
08 | %f | 格式化 浮点数 ,可指定小数点后的 精度 |
09 | %e | 用 科学计数法 格式化浮点数 |
10 | %E | 用 科学计数法 格式化浮点数 |
11 | %g | %f 和 %e 的简写 |
12 | %G | %f 和 %E 的简写 |
13 | %p | 用十六进制数格式化 变量地址 |
序号 | 符号 | 描述 | 实例 |
---|
01 | * | 定义宽度或者小数点精度 | |
02 | - | 在较长宽度数字 左对齐 | print("%-10f" % 3.14159) -> 3.141590 |
03 | + | 在正数前面显示 加号 | print("%+.2f" % 3.14159) -> +3.14 |
04 | <sp> | 在正数前面显示空格 | |
05 | # | 在 八/十六进制数 前面显示 '0' | print("%#x" % 0o22) -> 0x12 |
06 | 0 | 在较长宽度数字 前后面 填充 '0' | print("%010f" % 3.14159) -> 003.141590 |
07 | % | 输出一个单一的 '%' | print("%.2f%%" % 3.14159) -> 3.14% |
08 | (VAR) | 映射变量 (字典参数) | |
09 | m.n | m 最小总宽度,n 小数点后的位数 | print("%10.2f" % 3.14159) -> 3.14 |
七、三引号
- 允许一个字符串 跨多行 ,字符串中可以包含换行符、制表符以及其他特殊字符
para_str = """这是一个多行字符串的实例
多行字符串可以使用制表符
TAB ( \t )。
也可以使用换行符 [ \n ]。
"""
print(para_str)
-> 这是一个多行字符串的实例
-> 多行字符串可以使用制表符
-> TAB ( )。
-> 也可以使用换行符 [
-> ]。
八、字符串格式化函数
序号 | 函数 | 描述 |
---|
01 | str.format(*args, **kwargs) | 执行字符串 增强型格式化 操作,替换字段使用 {} OR : 分隔 |
02 | str.format_map(mapping) | 执行字符串 增强型格式化 操作,替换字段使用 {} 分隔 |
序号 | 数字格式化实例 | 描述 |
---|
01 | print("{:.2f}".format(3.14159)) -> 3.14 | 保留小数点后 两位 |
02 | print("{:+.2f}".format(3.14159)) -> +3.14 | 带符号 保留小数点后两位 |
03 | print("{:+.2f}".format(-1)) -> -1.00 | 带符号 保留小数点后两位 |
04 | print("{:.0f}".format(2.71828)) -> 3 | 不带小数 |
05 | print("{:0>2d}".format(5)) -> 05 | 数字补 0 (填充左边, 宽度为 2 ) |
06 | print("{:x<4d}".format(5)) -> 5xxx | 数字补 x (填充右边, 宽度为 4 ) |
07 | print(" {:x<4d}".format(10)) -> 10xx | 数字补 x (填充右边, 宽度为 4 ) |
08 | print("{:,}".format(1000000)) -> 1,000,000 | 以 逗号分隔 的数字格式 |
09 | print("{:.2%}".format(0.25)) -> 25.00% | 百分比 格式 |
10 | print("{:.2e}".format(1000000000)) -> 1.00e+09 | 指数 记法 |
11 | print("{:>10d}".format(14)) -> 14 | 右对齐 (默认, 宽度为 10 ) |
12 | print("{:<10d}".format(14)) -> 14 | 左对齐 (默认, 宽度为 10 ) |
13 | print("{:^10d}".format(14)) -> 14 | 居中 (默认, 宽度为 10 ) |
14 | print("{:b}".format(11)) -> 1011 | 二 进制 |
15 | print("{:d}".format(11)) -> 11 | 十 进制 |
16 | print("{:o}".format(11)) -> 13 | 八 进制 |
17 | print("{:x}".format(11)) -> b | 十六 进制 |
18 | print("{:#x}".format(11)) -> 0xb | 十六 进制 |
19 | print("{:#X}".format(11)) -> 0XB | 十六 进制 |
20 | print("{} = {{0}}".format("index")) -> index = {0} | 转义 大括号 |
print("{} {}".format("Hello", "World"))
print("{0} {1}".format("Hello", "World"))
print("{1} {0} {1}".format("Hello", "World"))
print("网站名:{name}, 地址:{url}".format(name="谷歌", url="www.google.com"))
site1 = {"name": "谷歌", "url": "www.google.com"}
print("网站名:{name}, 地址:{url}".format(**site1))
site2 = ("谷歌", "www.google.com")
print("网站名:{0}, 地址:{1}".format(*site2))
my_list1 = ["淘宝", "www.taobao.com"]
my_list2 = ["谷歌", "www.google.com"]
print("网站名:{0[0]}, 地址:{0[1]}".format(my_list1, my_list2))
print("网站名:{1[0]}, 地址:{1[1]}".format(my_list1, my_list2))
-> Hello World
-> Hello World
-> World Hello World
-> 网站名:谷歌, 地址:www.google.com
-> 网站名:谷歌, 地址:www.google.com
-> 网站名:谷歌, 地址:www.google.com
-> 网站名:淘宝, 地址:www.taobao.com
-> 网站名:谷歌, 地址:www.google.com
九、字符串函数与方法
序号 | 函数 | 描述 |
---|
01 | len(str) | 返回 字符串 个数 |
02 | max(str) | 返回 字符串 最大值 |
03 | min(str) | 返回 字符串 最小值 |
03 | str(obj) | 返回 适于人阅读的 字符串形式 |
序号 | 去除空白字符 | 描述 |
---|
01 | str.lstrip([chars]) | 返回 移除字符串 左边 的空格或指定字符后生成的新字符串 |
02 | str.rstrip([chars]) | 返回 移除字符串 右边 的空格或指定字符后生成的新字符串 |
03 | str.strip([chars]) | 返回 移除字符串 头尾 指定的字符序列生成的新字符串 |
序号 | 文本对齐 | 描述 |
---|
01 | str.center(width [,fillchar]) | 返回 一个指定宽度 居中 的字符串,小于字符串宽度则使用指定字符填充 |
02 | str.ljust(width [,fillchar]) | 返回 一个指定宽度 左对齐 的字符串,小于字符串宽度则使用指定字符填充 |
03 | str.rjust(width [,fillchar]) | 返回 一个指定宽度 右对齐 的字符串,小于字符串宽度则使用指定字符填充 |
04 | str.zfill(width) | 返回指定长度的字符串,原字符串 右对齐,默认填充 '0' |
序号 | 拆分连接 | 描述 |
---|
01 | str.join(seq) | 返回 通过指定字符 连接序列中元素 后生成的新字符串 |
02 | str.partition(string="") | 返回 一个 三元 的元组 (左子字符串,分隔符本身,右子字符串) |
03 | str.rpartition(string="") | 返回 一个 三元 的元组 (左子字符串,分隔符本身,右子字符串) |
04 | str.split(string="", num=str.count(string)) | 返回 一个 分割 后的字符串列表 |
05 | str.splitlines([keepends]) | 返回 一个 保留换行符 的列表,默认为 False |
序号 | 大小写转换 | 描述 |
---|
01 | str.capitalize() | 返回 一个 首字母大写 的新字符串 |
02 | str.casefold() | 返回 将字符串中 所有大写字符转换为小写 后生成的新字符串 (其他语言) |
03 | str.lower() | 返回 将字符串中 所有大写字符转换为小写 后生成的新字符串 (汉英语言) |
04 | str.swapcase() | 返回 大小写字母转换 后生成的新字符串 |
05 | str.title() | 返回 所有单词的 首字母都转化为大写 的新字符串 |
06 | str.upper() | 返回 将字符串中 所有小写字符转换为大写 后生成的新字符串 (汉英语言) |
序号 | 判断类型 | 描述 |
---|
01 | str.isalnum() | 判断 字符串是否 都由字母 (至少一个) 和数字组成 ,若是返回 True ,否则返回 False |
02 | str.isalpha() | 判断 字符串是否 都由字母 (至少一个)组成 ,若是返回 True ,否则返回 False |
03 | str.isdecimal() | 判断 字符串是否 只包含十进制字符 (针对Unicode对象) ,若是返回 True ,否则返回 False |
04 | str.isdigit() | 判断 字符串是否 只由数字组成 ,若是返回 True ,否则返回 False |
05 | str.isidentifier() | 判断 字符串是否是 有效的标识符 ,若是返回 True ,否则返回 False |
06 | str.islower() | 判断 字符串中 所有的字母 是否都为 小写,若是返回 True ,否则返回 False |
07 | str.isnumeric() | 判断 字符串是否 只由数字组成 (针对Unicode对象) ,若是返回 True ,否则返回 False |
08 | str.isprintable() | 判断 字符串是否 可打印 的,若是返回 True ,否则返回 False |
09 | str.isspace() | 判断 字符串是否 只由空白字符组成 ,若是返回 True ,否则返回 False |
10 | str.istitle() | 判断 字符串中 所有的单词 拼写 首字母是否为大写,且其他字母为小写 ,若是返回 True ,否则返回 False |
11 | str.isupper() | 判断 字符串中 所有的字母 是否都为 大写 ,若是返回 True ,否则返回 False |
序号 | 查找替换 | 描述 |
---|
01 | str.count(string, start=0, end=len(str)) | 返回 子字符串在字符串中出现的 次数 |
02 | str.encode(encoding='UTF-8', errors='strict') | 返回 编码后的字符串,它是一个 bytes 对象 |
03 | str.endswith(suffix, start=0, end=len(str)) | 检测 字符串是否 以指定后缀结尾 ,若是返回 True ,否则返回 False |
04 | str.expandtabs(tabsize=8) | 返回 字符串中的 \t 转为空格 后生成的新字符串 |
05 | str.find(string, start=0, end=len(str)) | 检测 字符串中是否 包含子字符串,若是返回索引值,否则返回 -1 |
06 | str.index(string, start=0, end=len(str)) | 检测 字符串中是否 包含子字符串,若是返回索引值,否则抛出异常 |
07 | str.replace(oldStrinig, newString, num=str.count(oldString)) | 返回 字符串中的 旧字符串替换成新字符串 后生成的新字符串 |
08 | str.rfind(string, start=0, end=len(str)) | 返回 字符串 最后一次出现的位置 ,若是没有匹配项,否则返回 -1 |
09 | str.rindex(string, start=0, end=len(str)) | 返回 字符串 最后一次出现的位置 ,若是没有匹配项,否则返回抛出异常 |
10 | str.startswith(suffix, start=0, end=len(str)) | 检测 字符串是否 以指定后缀开头 ,若是返回 True ,否则返回 False |
11 | str.maketrans(intab, outtab, deltab) | 返回 字符串 映射 后生成的新字符串 |
12 | str.translate(table) | 返回 翻译后的新字符串,翻译表是通过 str.maketrans() 方法转换而来 |