详解Python字符串

字符串 str

是 由多个 字符 组成的 文本 内容 、在 python 中 可以使用 双引号 、 单引号 或者 三引号 来标记 字符串类型。
在 编程语言中, 字符串是 使用 频率 最高的一种数据类型 。
Python 中的 字符串 是 不可变的 序列

字符串的定义方式

  • 字面量定义
  • str工厂函数

字面量定义

字符串 可以 使用 双引号 、 单引号 或者 三引号 进行 定义 、 且 支持 不同的 符号 之间的 嵌套 。

str工厂函数

str(obj) 可以将任何数据类型转换为字符串

字符串的运算

  • +: 字符串的拼接
"hello"  +  " world"  # hello world 
"1"  + "2"            # 12 

"1" +  2   # 错误的 , 可以 改成 "1" + str(2)

+ 前后 必须 均为 字符串 、如果 某一个类型 不是字符串,则 产生错误 ,可以 通过 str 函数 强制 将 非字符串类型 转换成 字符串 类型。

  • * : 重复 字符串 的次数
"hello"  * 3   #  hellohellohello

字符串的格式化

  • % 模式
  • format方法
  • f-string

% 模式

是 Python 语言 从 出生就自带的能力 、参考 C 语言而来的。 在 Python 中 不推荐使用该模式 。

  • %s :字符串
string  = "我是%s" % "中国人" 

string = "我是%10s" % "中国人"  # 对格式化的数据 左填充空格 右对齐 补全 10个长度

string = "我是%-10s" % "中国人"  # 对格式化的数据 右填充空格 左对齐 补全 10个长度
  • %d : 整数
age = 18
string = "我今年%d岁了" % age
  • %f : 浮点数
score = 90.55

print("%.1f" % score)   # 打印成绩并保留 1位小数
完整格式化语法
%[(name)][flags][width][.precision]typecode
  • (name): 设置占位符对应的名字、此时使用 % 传入数据必须使用字典格式
  • flags: 支持的符号有 +, - , 0
    • + : 在正数的前面补 +
    • - :配合 width 实现左对齐、默认右对齐
    • 0 : 右对齐补0、默认补充空格
  • width: 设置填充的宽度
  • precision: 设置精度、数字配合 f 可以实现保留几位小数、字符串代表保留几个字符
  • typecode : 类型编码、常见的值有 s (字符串), d (正数), f (浮点数), o (八进制), x (十六进制) 等

format 模式

Python2.6 版本 新增了 format 方法, 使用 {} 进行占位 , 且 大括号中 允许 传入 索引和关键字

  • { } 占位
string = "名字为{}的学生、性别为{}, 且年龄是{}岁".format(name, sex, age)
  • { index } 占位
string = "名字为{0}的学生、性别是{1},{0}它的年龄是{2}岁".format(name, sex, age)
  • { keyword } 占位
user = {
	"name": "李四",
	"age": 20,
	"sex": "女"
}
string = "名字为{name:x^10s}的学生、性别是{sex},{name}的年龄是{age:.2f}岁".format(**user)
完整格式化规则
	{exp:<单字符填充值><对齐方式><填充宽度><分隔符,><.精度><类型编码>}
  • 单字符填充值: 默认填充空格
  • 对齐方式:
    • < : 左对齐
    • > : 右对齐
    • ^ : 居中对齐
  • 填充宽度: 是一个整数、配合 对齐方式可以实现对齐效果
  • 分隔符 : 主要应用于数字、每三位使用指定符号进行分割
  • 精度: 设置小数保留几位小数、必须和 f 配合使用, 也可以实现字符串保留几个字符
  • 类型编码: 常见的值有 s (字符串), d (正数), f (浮点数), o (八进制), x (十六进制) 等

f-string模式

Python 3.6 版本 新增了 f 模式 ,优化 了 format 方法
语法: f"{exp}"
exp 是一个 python 表达式 ,而非 关键字 、支持 表达式运算,将运算的结果 作为 格式化后的 数据。

user = {
    "name": "李四",
    "age": 20,
    "sex": "女"
}
string = f"名字为{user["name"]}的学生、性别是{user["sex"]},{name}的年龄是{user["age"]}岁"

完整格式化规则

用法完全参考format模式

特殊字符

  • 单引号 、 双引号、 \

如果 单引号, 双引号 ,三引号 冲突的话, 推荐使用 单双引号 嵌套 。也可以使用 \ 对 引号转移。
如果 是 \ 、 例如 \t , \n 等特殊字符 希望 保持 字符串 原意、那么 可以 在 \ 前 在 加一个 \ 进行转移 , 推荐 是在 字符串前加 一个 r

字符串切片

  • 索引获取指定位置字符
string[0]   # 获取 字符串中的第一个字符
  • 切片操作
string[1: ]  # 获取 字符串 除 第一个字符以外 的所有内容

string[1:5]  #  获取 字符串中 索引为 1 ~ 5 且不包含 5 的所有内容 

string[1:5:2]  #  获取 字符串中 索引为 1, 3 的所有内容组成的字符串 

string[-1:-4:-1]  # 使用 负索引 进行切片 

string[::-1]   #  反转字符串

字符串 常见的方法

字符串转换相关方法

  • upper() : 将 字符串中 所有的 字母 转成 大写
  • lower() : 将字符串中所有的字母 转成 小写
  • capitalize() : 将 字符串中的 首字母 转大写 、 其他字母 转小写
  • title() : 将 每一个单词首字母转大写、 其他字母 转小写
  • swapcase() : 将 字符串中的 大写转小写 、 小写转大写
  • isupper() : 判断 字符串是否 是 全大写
  • islower() : 判断 字符串是否是 全小写
  • istitle() : 判断 字符串是否是 标题
string = "abc Hello TEST 1 中国"

# 将字符串全部转大写
print(string.upper())
# 将字符串全部转小写
print(string.lower())
# 将字符串的首字符转大写
print(string.capitalize())
# 将字符串转成标题格式 (每个单词首字母大写)
print(string.title())
# 判断字符串中的所有字母是否是全大写的
print(string.upper().isupper())
print(string.islower())

字符串 查找 相关方法

  • find(sub, start?, end?) : 根据 sub 查找 在 字符串中 第一次 出现的 索引位置 , 如果 找不到, 则返回 -1
  • rfind(sub, start?, end?) : 根据 sub 查找 在 字符串中 最后一次 出现的索引位置 、如果找不到 ,返回 -1
  • index(sub, start?, end?) : 用法 和 find 相同, 区别 在于 如果 找不到 sub, 会产生 ValueError 错误
  • rindex(sub, start?, end?) : 用法 和 rfind 相同 ,区别 在于 如果 找不到 sub, 会产生 ValueError 错误
  • count(sub, start? , end?) : 查找 sub 子串 在 整个 字符串中 出现的 次数
string = "helllo wlorld!!!"

# 查找 el 在字符串中第一次出现的索引位置
print(string.find("le"))
print(string.rfind("le"))
print(string.index("el"))
print(string.rindex("el"))
# 获取 lo 子串在整个字符串中出现的次数
print(string.count("ll"))

字符串的对齐方式

  • ljust(width , fillchar=“”) : 左对齐 、默认 填充 空格 , 填充的 值 必须是 一个 字符
  • rjust(width, fillchar=“”) : 右对齐 ,默认填充 空格, 填充的 值 必须是 一个 字符
  • center(width, fillchar=“”) : 居中 对齐
  • zfill(width) : 左补 0
string = "hello"

print(string.ljust(10, "x"))
print(string.rjust(10, "y"))
print(string.center(10, "x"))

print(string.zfill(10))

字符串的 截取 方式

  • strip(chars=" ") : 去除 字符串 前后 指定的 字符 、默认是 空格
  • lstrip(chars=“”) : 去除 字符串 前 边的 指定 字符、 默认是 空格
  • rstrip(chars=“”) : 去除 字符串 后面指定的 字符,默认是 空格
  • removeprefix(prefix) : 移除指定的 前缀
  • removesuffix(suffix) : 移除指定的 后缀
  • startswith(prefix, start? , end?) : 判断 字符串是否 以 指定的 前缀 开头
  • endswith(suffix, start? , end? ) : 判断 字符串 是否以 指定的 后缀 结尾

字符串的编解码

import  base64

base64.b64encode(bytes)   #  将一个 字符串流 进行 base64 编码, 返回一个 字符串 流

base64.b64decode(str|bytes) # 将一个 字符串/字符串流  进行 base64 解码、返回一个 解码后的 字符串流 

str.encode()  :  # 将指定的字符串 str 转换成 字符串流 

bytes.decode() : # 将 字符串流 转换成 字符串 

字符串的 拆分 和 合并

  • split(sep, maxsplit) :按照 指定的 sep 分隔符 进行 字符串的 拆分 , 默认是 全部进行拆分, 可以通过 maxsplit 设置 拆分的次数。
  • rsplit(sep, maxsplit) : 按照 指定的 sep 分隔符 进行 字符串的 拆分 , 默认是 全部进行拆分, 可以通过 maxsplit 设置 拆分的次数。如果 传了 maxsplit 会 从 右 向 左进行 依次拆分
  • splitlines(keepends=False):按照 换行符 进行 字符串的拆分 , 如果 keepends 设置为 True, 则 拆分后的字符串 保留 换行符 。
  • join(iterable): 使用 分隔符 调用 join 方法 进行 多值的 合并 。 注意事项: 可迭代对象中的元素 必须都是 字符串,如果不是,需要先映射成 字符串。

字符串的 替换

  • replace(old, new, count=-1) : 将 字符串 中 old 子串 替换成 new , 替换 count 次, 当 count = -1 代表 替换 所有

字符串中的 断言

  • isascii() : 判断 一个 字符串中的内容 是否 都是 ascii 范围的值 。
  • isalpha() : 判断一个 字符串 是否 由 纯 字母组成
  • isalnum() : 判断一个 字符串 是否 由 字母 和 数字 组成
  • isdigit() : 判断一个字符串是否 由纯 阿拉伯数字 组成
  • isnumeric() : 判断一个字符串是否 由纯数字(各种数字) 组成

字符串UTF-8汉字编码规则

在UTF-8编码下、一个汉字占用3个字节、在GBK编码下、一个汉字占用2个字节、将2个字节更改为3个字节的规则:

11000011 10110011 --->  11101100 10001110  10110011

你可能感兴趣的:(python,网络,开发语言)