Python—字符串处理

宋正兵 on 2022-07-06

字符串的常用操作

方法 描述
str.lower() 将str字符串全部转成小写字母,结果为一个新的字符串
str.upper() 将str字符串全部转成大写字母,结果为一个新的字符串
str.split(sep=None) 把str按照指定的分隔符sep进行分隔,结果为列表类型
str.count(sub) 结果为sub这个字符串在str中出现的次数
str.find(sub) 插损sub这个字符串在str是否存在,如果不存在返回-1,如果存在,结果为sub首次出现的索引
str.index(sub) 功能与find()相同,区别在于要查询的子串sub不存在时,程序报错
str.startswith(s) 查询字符串str是否以子串s开头
str.endswith(s) 查询字符串str是否以子串s结尾
str.replace(old, news) 使用news替换字符串str中所有的old字符,结果是一个新的字符串
str.center(width, fillchar) 字符串str在指定的宽度范围内居中,可以使用fillchar进行填充
str.join(iter) 在iter中的两两元素的之间增加一个新的字符串str
str.strip(chars) 从字符串中去掉左侧和右侧chars中列出的字符串
str.lstrip(chars) 从字符串中去掉左侧chars中列出的字符串
str.rstrip(chars) 从字符串中去掉右侧chars中列出的字符串

格式化字符串的三种方式

使用占位符进行格式化字符串

%s为字符串格式,%d为十进制整数格式,%f为浮点数格式。

1
2
3
4
5
name = 'Tom'
age = 18
score = 98.5
print('name:%s, age:%d, score=%.2f' % (name, age, score))
# name:Tom, age:18, score=98.50

该内容与c语言printf参数类似。

f-string格式化字符串

Python3.6引入的格式化字符串方式,以{}标明被替换的字段

1
2
print(f'name:{name}, age:{age}, score:{score}')
# name:Tom, age:18, score:98.5

使用字符串的format()方法进行格式化字符串

1
2
3
#模板字符串.format(逗号分隔的参数)
print('name:{0}, age:{1}, score:{2}'.format(name, age, score))
# name:Tom, age:18, score:98.5

format()方法支持格式控制

填充 对齐方式 宽度 .精度 类型
引导符号 用于填充的单个字符串 <左对齐
>右对齐
^居中对齐
字符串的输出宽度 数字的千位分隔符 浮点数小数部分的精度或字符串的最大输出长度 整数类型:b\c\d\o\x\X
浮点数类型:e\E\f\%
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
print('{0:*<20}'.format(name)) #字符串的显示宽度为20,左对齐,空的部分用*号填充
#Tom*****************

print('{0:,}'.format(12345678.111))
#12,345,678.111

print('{0:.2f}'.format(12345678.111))
#12345678.11

print('{0:.3}'.format('abcdefgh'))
#abc

a = 425
print('{0:b},{0:c},{0:d},{0:o},{0:x},{0:X}'.format(a))
#110101001,Ʃ,425,651,1a9,1A9

b = 3.1415926
print('{0:.2f},{0:.2E},{0:.2e},{0:.2%}'.format(b))
#3.14,3.14E+00,3.14e+00,314.16%

字符串的编码和解码

字符串的编码通过将str类型转成bytes类型:

1
2
3
4
#str.encode(encoding='utf-8', errors='strict/ignore/replace')
s = '我是帅哥'
scode_utf8 = s.encode('utf-8')
print(scode_utf8)

字符串的解码通过将bytes类型转成str类型:

1
2
3
#str.decode(encoding='utf-8', errors='strict/ignore/replace')
print(scode_utf8.decode('utf-8')) #我是帅哥
print(bytes.decode(scode_utf8)) #我是帅哥

数据的验证和处理

数据的验证

方法 描述
str.isdigit() 所有字符都是数字(阿拉伯数字)
str.isnumeric() 所有字符都是数字(认中文大写、小写数字,罗马数字)
str.isalpha() 所有字符都是字母(包含中文字符)
str.isalnum() 所有字符都是数字或字母(包含中文字符)
str.islower() 所有字符都是小写
str.isupper() 所有字符都是大写
str.istitle() 所有字符都是首字母大写
str.isspace() 所有字符都是空白字符(\n、\t等)

数据的处理

  • 字符串拼接

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    s1 = 'hello'
    s2 = 'world'
    #(1)使用“+”进行拼接字符串
    print(s1 + s2)
    #(2)使用str.join()方法进行拼接字符串
    print(''.join(['hello', 'world']))
    #(3)直接拼接
    print('hello''world')
    #(4)使用格式化字符串进行拼接
    print('%s%s' % (s1, s2))
    print(f'{s1}{s2}')
    print('{0}{1}'.format(s1, s2))
  • 字符串去重

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    s = 'dcbbaa'
    # (1)字符串拼接+not in
    new_s = ''
    for item in s:
    if item not in new_s:
    new_s += item
    print(new_s)

    # (2)使用索引+not in
    new_s2 = ''
    for i in range(len(s)):
    if s[i] not in new_s2:
    new_s2 += s[i]
    print(new_s2)

    # (3)使用集合去重+列表排序
    new_s3 = set(s)
    lst = list(new_s3)
    lst.sort(key=s.index) #排序的关键字
    print(''.join(lst))
  • 列表元素去重

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    lst = ['d', 'c', 'b', 'b', 'a', 'a', 'a']

    # (1)遍历+not in
    new_lst = []
    for item in lst:
    if item not in new_lst:
    new_lst.append(item)
    print(new_lst)

    # (2)使用索引+not in
    new_lst2 = []
    for i in range(len(lst)):
    if lst[i] not in new_lst2:
    new_lst2.append(lst[i])
    print(new_lst2)

    # (3)使用集合去重
    s_lst = set(lst)
    new_lst3 = list(s_lst)
    new_lst3.sort(key=lst.index)
    print(new_lst3)