# Day_06 ### 字符串 + 字符串概述 : 使用 ''/""/''''''' 包裹起来的数据 + 字符串声明 : + 变量 = '' + 变量 = "信息" + 变量 = """信息(可换行)""" + 不可变类型 : 字符串一旦创建,内存中就不允许修改,如果需要修改,实在内存重新分配空间存储新字符串 + 字符串索引 : 变量名[索引值] + 字符串切片 : 变量名[start, stop[, step]] + 字符串拼接 : + "+" : 将两个字符串合并形成新字符串 + "*" : 将一个字符串进行连续拼接 + 赋值语句 + 变量名 = "" + 变量名 = str(数据类型) (数据类型可以是 int ,float, bool) + 字符串函数 + 字符串查找 方法 | 描述 :---: | :---: **.find()** | 查找,返回从左第一个指定字符的索引,找不到返回 -1 .rfind() | 查找,返回从右第一个指定字符的索引,找不到返回 -1 **.index()** | 查找,返回从左第一个指定字符的索引,找不到报错 .rindex() | 查找,返回从右第一个指定字符的索引,找不到报错 **.count()** | 计数,返回查找字符在字符串中个数 **.endswith(suffix[, start[, end]])** | 返回值为 布尔值,如果以指定的后缀结尾,则返回True,否则返回False。start 为开始位置,end为结束位置,默认为整个字符串 (Python内置) **.startswith(prefix[, start[, end]])** | 返回值为 布尔值,如果以指定的字符串开头,则返回True,否则返回False。start 为开始位置,end为结束位置,默认为整个字符串 (Python内置) + 字符串拆分 方法 | 描述 :---: | :---: .partition() | 把 字符串 以 从左到右第一个匹配到的字符分为三个部分 (str 前、自身、后) .splitlines() | 按行 (换行符) 分割,返回一个包含各行作为元素的列表 **.split()** | 按照指定"元素"分割,maxsplit: 默认将指定所有内容进行分割,可以指定 maxsplit 值 (maxsplit值为 1 只按照第一个指定内容分割,后面不分个割) ``` >>> str = "124\n441" >>> str.splitlines() ['124', '441'] >>> str.partition("\n") ('124', '\n', '441') >>> str.split("4") ['12', '\n', '', '1'] ``` + 字符串替换 方法 | 描述 :---: | :---: **.replace()** | 从左到右替换指定元素,可以指定替换个数,默认全部替换 .translate() | 按照对应关系替换内容 from string import maketrans + 字符串修饰 方法 | 描述 :---: | :---: **.center(width, fillchar)** | 让字符串在指定长度居中,如果不能居中 左短右长,可以指定填充内容,默认空格填充,如果指定长度小于原字符串长度则返回原字符串 .ljust(width, fillchar) | 让字符串在指定长度左对齐,可以指定填充内容,默认空格填充,如果指定长度小于原字符串长度则返回原字符串 .rjust(width, fillchar) | 让字符串在指定长度右对齐,可以指定填充内容,默认空格填充,如果指定长度小于原字符串长度则返回原字符串 .zfill(width) | 返回指定长度的字符串,使原字符串右对齐,前面用 0 填充到指定字符串长度,若指定长度小于字符串长度,则直接输出元字符串 **.format(value, format_spec)** | 通过 {} 和 : 代替之前的 % 。使用 format() 格式化字符串时,子字符串中使用 {} 作为占位符,占位符的内容将引用 format() 中参数进行替换。 **.strip(chars)** | 去除字符串 开头结尾 处指定的字符,不会去除字符串中间对应的字符,默认为空格 (chars : 要去除字符) .rstrip(chars) | 截掉字符串右边空格或指定字符,默认为空格 (chars : 要去除字符) .lstrip(chars) | 截掉字符串左边空格或指定字符,默认为空格 (chars : 要去除字符) + 字符串格式化 + format() 用法 ``` # 数据传参 >>> "年龄: {}, 性别: {},姓名:{}".format(19, "男", "小明") '年龄: 19, 性别: 男,姓名:小明' # 通过索引设置 >>> print("年龄: {2}, 性别: {1},姓名:{0}".format("小明","男", 19)) 年龄: 19, 性别: 男,姓名:小明 # 通过 键值对索引 设置 >>> "年龄: {age}, 性别: {gender},姓名:{name}".format(name="小明",gender="男", age=19) '年龄: 19, 性别: 男,姓名:小明' # 字典传参 >>> info = {"name": "小红", "age": 18} >>> "姓名:{name},年龄:{age}".format(**info) '姓名:小红,年龄:18' ``` + 填充与格式化 + 格式 : :[填充字符][对齐方式<^>][宽度] + ":<" : 左对齐 ``` >>> print("{:0<10}".format("你好")) 你好00000000 ``` + ":^" : 居中对齐 ``` >>> print("{:0^10}".format("你好")) 0000你好0000 ``` + ":>" : 右对齐 (默认) ``` >>> print("{:0>10}".format("你好")) 00000000你好 ``` + 精度与进制 + :.2f : 浮点数 ``` >>> print("{:.2f}".format(2)) 2.00 ``` + :b : 二进制 ``` >>> print("{:b}".format(2)) 10 >>> print("{:0>10.2f}".format(16)) 0000016.00 ``` + :o : 八进制 ``` >>> print("{:o}".format(16)) 20 ``` + :x : 十六进制 ``` >>> print("{:x}".format(16)) 10 ``` + 字符串格式化 --> 百分号 格式 | 描述 :---: | :---: %% | 百分号标记 %s | 字符串 %f | 浮点型数字 %d/i | 有符号整数 (十进制) + 字符串格式化 --> f-string + 格式 : f"{变量名}" + 在 {} 中可以做简单的运算 ``` >>> f"{2*8}" '16' ``` + 左对齐/右对齐/居中对齐 /^ + f"{:.2f}" ``` >>> f"{13:.2f}" '13.00' ``` + f"{:d}" ``` >>> f"{13:b}" '1101' ``` + f"{:o}" ``` >>> f"{13:o}" '15' ``` + f"{:x}" ``` >>> f"{13:x}" 'd' ``` + 字符串变形 方法 | 描述 :---: | :---: **.upper()** | 将字符串中的所有小写字母转换为大写字母 **.lower()** | 将字符串中的所有大写字母转换为小写字母 .swapcase() | 将字符串str中的大小写字母同时进行互换。即字符串中大写字母转换为小写字母,小写字母转换为大写字母。 **.title()** | 返回一个满足 标题格式 的字符串。即所有英文单词**首字母大写**,其余英文字母小写 .capitalize() | 将字符串的第一个字母变成大写,其余字母变为小写 .expandtabs() | 把字符串中的 tab 符号 (\t) 转化为空格 (\t 默认空格数为 8 ) .casefold() | 将字符串中的所有大写字母转换为小写字母。也可以将 **非英文语言** 中的大写转化为小写 + 字符串判断 方法 | 描述 :---: | :---: .isalnum() | 检测字符串是否由字母和数字组成。str 中至少有一个字符且所有字符都是字母或数字则返回 True,否则返回 False .isalpha() | 检测字符串是否只由字母组成。字符串中至少有一个字符且所有字符都是字母则返回 True,否则返回 False .isdigit() | 检测字符串是否只由数字组成。字符串中至少有一个字符且所有字符都是数字则返回 True,否则返回 False (① 也是数字) .isupper() | 检测字符串中字母是否全由大写组成。(可包含非字母字符),返回值为 布尔值 .islower() | 检测字符串中字母是否全由小写组成。(可包含非字母字符),返回值为 布尔值 .istitle() | 检测判断字符串中所有首字母是否为大写,且其他字母是否为小写,字符串中可以存在其他非字母的字符。若字符串中所有单词的首字母大写,其他字母小写返回 True 否则返回 False .isspace() | 检测字符串是否由空格组成。若只包含空格返回 True ,否则返回 False .endswith(suffix[, start[, end]]) | 返回值为 布尔值,如果以指定的后缀结尾,则返回True,否则返回False。start 为开始位置,end为结束位置,默认为整个字符串 (Python内置) .startswith(prefix[, start[, end]]) | 返回值为 布尔值,如果以指定的字符串开头,则返回True,否则返回False。start 为开始位置,end为结束位置,默认为整个字符串 (Python内置) **.split()** | 按照指定"元素"分割,maxsplit: 默认将指定所有内容进行分割,可以指定 maxsplit 值 (maxsplit值为 1 只按照第一个指定内容分割,后面不分个割) + 字符串编码 + encode() : 编码,以指定的编码格式编码字符串,默认为 "utf-8",将字符串转换为字节码 str -> byte + 语法:str.encode(encoding="utf-8", errors='strict') + encoding: 可选参数、默认 "utf-8",常用类型 utf-8、gb2312、cp936、gbk等 + errors: 可选参数,设置不同错误的处理方案。默认为 "strict",意为编码错误引起一个 UnicodeEncodeError。其他可能为 'ignore'、'replace'、'xmlcharrefreplace' 以及通过 codecs.register_error() 注册其他的值 + decode() : 解码,以 encoding 指定的编码格式解码字符串,默认编码为字符串编码,将字节码转换为字符串 byte -> str + 语法:str.decode(encoding="utf-8", errors='strict') + encoding: 可选参数、默认 "utf-8",常用类型 utf-8、gb2312、cp936、gbk等 + errors: 可选参数,设置不同错误的处理方案。默认为 "strict",意为编码错误引起一个 UnicodeEncodeError。其他可能为 'ignore'、'replace'、'xmlcharrefreplace' 以及通过 codecs.register_error() 注册其他的值 + 转义字符 (改变原有字符意义) 转义 | 描述 :---: | :---: \\ | 产生一个 反斜杠 (\) 符号 \' | 产生一个 单引号 (') \" | 产生一个 双引号 (") \n | 换行 \t | 横向制表符 (tab) 占 8 个字符 \newline | 连续 (当一行代码太长时使用) \other | 不转义,保留原有字符 + repr() (一个字符串 n 个 '\', 不足 偶数个 '\' 系统转义时 会自动添加一个 n+1 个 '\', repr() 对 系统增加过的 n+1 个 '\' 双倍转义产生 2n 个 '\', print() 输出时 输出 转移之后的 n/2 个 '\') ``` >>> '\\\你好' '\\\\你好' >>> repr('\\\你好') "'\\\\\\\\你好'" >>> print('\\\你好') \\你好 ``` ```python str = input("输入 带有 '\\ 的 字符串: ") str_count = str.count('\\') while str_count % 2 != 0: str_count += 1 else: print(f'系统处理时 返回 \\ 个数为 {str_count}') print(f"repr() 返回 \\ 个数为 {str_count*2}") print(f'print() 输出时 输出 \\ 个数为 {str_count//2}') ``` + 元字符串 + 在任意字符串前添加字母 r 或者 R ,当前字符串所有转义字符都不会进行转义。(正则表达式中常见格式)