python 工具

Python 字符串(String)

语法:变量名 = 字符串常量/字符串类型变量

1. 单行字符串

# 单引号/双引号开头,单引号/双引号结尾
str1 = 'hello, world'
str2 = "hello, world"

# 单引号字符串中可以包含双引号,双引号字符串中可以包含单引号
str3 = 'hello"world'
str4 = "hello'world"

# Python会自动在任意的表达式中合并相邻的字符串常量(把这种形式放到圆括号中,就可以允许它跨越多行)
title = "Meaning " "of " "Life" # title ="Meaning of Life"
number = ("123\n" "456\n" "789") # 可以通过这种形式定义一个多行字符串

2. 多行字符串

# 以三重引号(单引号/双引号)开头和结尾

# 单引号
str5 = '''1.hello
2.world'''

# 双引号
str5 = """1.hello
2.world"""

3. 转义字符

# \\ 反斜杠(\)
# \' 单引号(')
# \" 双引号(")
# \n 换行符(Newline)
# \t 水平制表符(Tab)
# \r 回车符(Carriage Return)
# \b 退格符(Backspace)
# \f 换页符(Formfeed)
# \v 垂直制表符(Vertical Tab)
# \a 响铃符(Bell/Alert)
# \0 空字符(Null Character)
# \yyy 八进制数,y 代表 0~7 的字符,例如:\012 代表换行。
# \xyy 十六进制数,以 \x 开头,y 代表的字符,例如:\x0a 代表换行。
print('\x68\x65\x6C\x6C\x6F\x2C\x77\x6F\x72\x6C\x64\x21') #输入hello,world!
使用raw字符串抑制转义
# 使用raw字符串抑制转义,在字符串前加上r
str6 = r'hello,world\n'

4. 字符串格式化

[1] % (继承于c语言)

  • 语法: '转换目标1 转换目标2' % (对象1, 对象2)
  • 转换目标: %字符码
  • 转换目标和对象的数量必须一致
name = '小明'
age = 10
str1 = '我的名字叫做%s,年龄为%d' % (name, age)

[2] format (python2.6新增)

  • 语法: '{} {}'.format(对象1, 对象2)
  • 使用{}替换转换目标
  • 对象的数量必须大于等于大括号的数量
  • str1 = '我的名字是{},年龄:{}'.format('小刚', 13)	# 我的名字是小刚,年龄为13

[3] f-string (python3.6 新增)

  • f-string 以 f 或 F 开头,字符串内容用引号包围,表达式放在大括号 {}
  • x = 10
    y = 20
    print(f"{x} + {y} = {x + y}") # 输出: 10 + 20 = 30
  • {} 语法详解
  • # {}语法:{[对象名][!转换标志][:格式符]}
    # 对象名: 变量/常量
    name = '小刚'
    age = 13
    str1 = f'我的名字是{name},年龄:{age}'
    print(str1)     # 我的名字是小刚,年龄为13
    
    # 转换标志可以是r、s,或者a分别是在该值上对repr、str或ascii内置函数的一次调用。
    # repr()	# 返回字符串,一般比str()更详细,如果对象没有定义 __repr__ 方法,会返回默认的 <...> 格式。
    # str()	    # 返回字符串,主要用于输出和显示,内容更简洁,如果对象没有定义 __str__ 方法,会调用 __repr__ 作为备选。
    # ascii()	# 返回对象的 ASCII 安全表示(非 ASCII 字符会被转义)。类似于 repr(),但会将非 ASCII 字符转换为 \x、\u 或 \U 转义序列。
    str2 = f'{'你好!'!a}'
    print(str2)     # '\u4f60\u597d!'
  • 格式符详解
  • # 格式符
    # 语法:[[填充字符]对齐方式][+][#][0][宽度][,][.精度][字符码]
    
    # 填充字符: 只能是一个字符,不指定则默认是用空格填充
    # 对齐方式: ^, <, > 分别是居中、左对齐、右对齐
    str1 = f'{1.23:a>10}'
    print(str1)     # aaaaaa1.23
    
    # + 正数前显示 +,负数前显示 -
    # # 在二进制数前面显示零('0b'),在八进制数前面显示零('0o'),在十六进制前面显示'0x'或者'0X'(取决于用的是'x'还是'X')
    # 0 填充'0'而不是默认的空格(当没有设置 填充字符 时生效)
    str2 = f'{12:<+#010d}'
    print(str2)     # +120000000
    
    # 宽度.精度	    .精度 只对浮点数类型起作用
    str3 = f'{1.24:010.2f}'
    print(str3)     # 0000001.24
    
    # , 以千分位显示
    str4 = f'{1212512512:020,.2f}'
    print(str4)     # 0,001,212,512,512.00
    
    # 可以使用大括号 {} 来转义大括号
    str5 = f'{{1}}'
    print(str5)     # {1}

字符码表
序号 字符码 描述
1 s 字符串(或任何对象)
2 r s,但使用repr,而不是str
3 c 字符及其ASCII码
4 b 二进制 (整数)
5 d 十进制 (整数)
6 o 八进位整数
7 x 十六进制整数
8 X X,但打印大写
9 e 浮点指数
10 E e,但打印大写
11 f 浮点十进制
12 F f,但打印大写
13 g 浮点e或f
14 G 浮点E或f
15 % 显示百分比

5. 访问字符串中的值

[1] 偏移量

str1 = 'hello'
  • 正偏移从字符串开始处计数,从 0 开始
  • 负偏移从字符串结尾处反向计数,从 -1 开始
  • 正偏移 = 负偏移 + 字符串长度
正偏移→ 0 1 2 3 4
字符串 h e l l o
负偏移← -5 -4 -3 -2 -1
str_len = len(str1)	#len()函数是python内置函数,返回集合的长度

[2] 索引

  • 索引用于获取特定偏移的元素
# 语法:字符串[偏移量]
str1 = 'hello'
s1 = str1[0]	# s1 = 'h'
s2 = str1[-5] # s2 = 'h'

[3] 分片

  • 分片用于提取子字符串
# 语法:字符串[头下标:尾下标]	截取范围为[头下标,尾下标-1),包含头下标不包含尾下标
# 头下标省略默认值为0,尾下标省略默认值为字符串长度
str2 = 'hello'
s1 = str2[0:3]	# s1 = 'hel'
s2 = str2[-4:]	# s2 = 'ello'
s3 = str2[:-2]	# s3 = 'hel'

# 第三个索引:步进(可选)
# 语法:字符串[头下标:尾下标:步进数]	每隔'步进数'个元素索引一次,默认值为1
str2 = 'hello'
s1 = str2[::2]	# s1 = 'hlo'
# 步进数可以为负数,分片将会从右至左进行
# 且两个边界的意义实际上进行了反转,截取范围变成了[头下标, 尾下标+1)
s2 = str2[::-1]	# s2 = 'olleh',反转
s3 = str2[4:0:-1]	# s3 = 'olle'

[4] 不能通过偏移量来修改字符串内容

name = '小明'
name[1] = '刚'	# 会报错
name = '小刚'	    # 只能重新赋值

6. 字符串常用函数

序号 函数 描述
1 str.min(str) 返回字符串 str 中最小的字母
2 str.max(str) 返回字符串 str 中最大的字母
3 str.capitalize() 将字符串的第一个字符转换为大写
4 str.count(str, beg= 0, end=len(string)) 返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数
5 str.encode(encoding='UTF-8',errors='strict') 以 encoding 指定的编码格式编码字符串,如果出错默认报一个ValueError 的异常,除非 errors 指定的是'ignore'或者'replace'
6 str.startswith(substr, beg=0,end=len(string)) 检查字符串是否是以指定子字符串 substr 开头,是则返回 True,否则返回 False。如果beg 和 end 指定值,则在指定范围内检查
7 str.endswith(suffix, beg=0, end=len(string)) 检查字符串是否以 suffix 结束,如果 beg 或者 end 指定则检查指定的范围内是否以 suffix 结束,如果是,返回 True,否则返回 False
8 str.find(str, beg=0, end=len(string)) 检测 str 是否包含在字符串中,如果指定范围 beg 和 end ,则检查是否包含在指定范围内,如果包含返回开始的索引值,否则返回-1
9 str.rfind(str, beg=0,end=len(string)) 类似于 find()函数,不过是从右边开始查找
10 str.index(str, beg=0, end=len(string)) 跟find()方法一样,只不过如果str不在字符串中会报一个异常
11 str.rindex( str, beg=0, end=len(string)) 类似于 index(),不过是从右边开始
12 str.lower() 转换字符串中所有大写字符为小写
13 str.islower() 如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回 False
14 str.upper() 转换字符串中的小写字母为大写
15 str.isupper() 如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False
16 str.title() 返回"标题化"的字符串,就是说所有单词都是以大写开始,其余字母均为小写
17 str.istitle() 如果字符串是标题化的(见 title())则返回 True,否则返回 False
18 str.isspace() 如果字符串中只包含空白,则返回 True,否则返回 False
19 str.isalnum() 检查字符串是否由字母和数字组成,即字符串中的所有字符都是字母或数字。如果字符串至少有一个字符,并且所有字符都是字母或数字,则返回 True;否则返回 False
20 str.isalpha() 如果字符串至少有一个字符并且所有字符都是字母或中文字则返回 True, 否则返回 False
21 str.isdigit() 如果字符串只包含数字则返回 True 否则返回 False
22 str.isnumeric() 如果字符串中只包含数字字符,则返回 True,否则返回 False
23 str.isdecimal() 检查字符串是否只包含十进制字符,如果是返回 true,否则返回 false
24 str.join(seq) 以指定字符串作为分隔符,将 seq 中所有的元素(必须是字符串)合并为一个新的字符串
25 str.center(width, fillchar) 返回一个指定的宽度 width 居中的字符串,fillchar 为填充的字符,默认为空格
26 str.ljust(width[, fillchar]) 返回一个原字符串左对齐,并使用 fillchar 填充至长度 width 的新字符串,fillchar 默认为空格
27 str.rjust(width,[, fillchar]) 返回一个原字符串右对齐,并使用fillchar(默认空格)填充至长度 width 的新字符串
28 str.lstrip([chars]) 截掉字符串左边的空格或指定字符
29 str.rstrip([chars]) 删除字符串末尾的空格或指定字符
30 str.strip([chars]) 在字符串上执行 lstrip()和 rstrip()
31 str.split(str="", num=string.count(str)) 以 str 为分隔符截取字符串,如果 num 有指定值,则仅截取 num+1 个子字符串
32 str.expandtabs(tabsize=8) 把字符串 string 中的 tab 符号转为空格,tab 符号默认的空格数是 8
33 str.splitlines([keepends]) 按照行('\r', '\r\n', \n')分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符
34 str.swapcase() 将字符串中大写转换为小写,小写转换为大写
35 str.replace(old, new [, max]) 把 将字符串中的 old 替换成 new,如果 max 指定,则替换不超过 max 次
36 str.maketrans() 创建字符映射的转换表,对于接受两个参数的最简单的调用方式,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标,第三个参数还是字符串,表示需要删除的字符(前两个参数的长度必须一致)。也可使用字典作为参数进行映射
37 str.translate(table) 根据 table 给出的表(包含 256 个字符)转换 string 的字符
38 str.zfill(width) 返回长度为 width 的字符串,原字符串右对齐,前面填充0
39 str.partition(sep) partition() 是 Python 字符串对象的一个内置方法,用于根据指定的分隔符将字符串分割成三部分。sep:用作分隔符的字符串。返回一个包含三个元素的元组:1.分隔符之前的部分 2.分隔符本身 3.分隔符之后的部分
40 str.rpartition(sep) 与 partition() 类似,但从字符串的右侧开始查找分隔符
41 value in string 如果value在string里返回True,否则返回False