本篇文章对python语言中的字符串处理相关知识进行了汇总整理,希望帮助python初学者更系统的掌握一些字符串相关的基本操作。
1.1 字符串相加 返回合并的字符串
a = 'amberr'
b = 'hello'
c = " "
b + c + a
>>>'hello amberr'
1.2 字符串相乘 返回相乘回数的重复字符串
a*3
>>>'amberramberramberr'
1.3 判断是否为字符串
print('a' in a)
print('t' in a)
>>>True
>>>False
小写字母编码整体大于大写字母编码。有多个字母时,从第一位开始按照顺序判断
print('A,'A'<'a')
print('aBc,'aBc'<'aBa')
>>> A<a True
>>> aBc<aBa False
.
len()
len(a)
>>>6
str()
b = 123
print(b,type(b))
print(str(b),type(str(b)))
>>>123 <class 'int'>
>>>123 <class 'str'>
3.1 find() & rfind()
find() 查找o在字符串中第一次出现的位置 返回索引号,没有返回-1
print(a.find('r'))
print(a.find('p'))
>>> 4
>>> -1
rfind() 查找o在字符串中最后一次出现的位置 返回索引号,没有返回-1
print(a.rfind('r'))
print(a.rfind('p'))
>>> 5
>>> -1
3.2 index() & rindex()
index() 查找o在字符串中第一次出现的位置 返回索引号,没有报错
print(a.index('r'))
print(a.index('p'))
>>> 4
>>> ValueError: substring not found
rindex() 查找o在字符串中最后一次出现的位置 返回索引号,没有报错
print(a.rindex('r'))
print(a.rindex('p'))
>>> 5
>>> ValueError: substring not found
count()
返回在字符串中出现的次数 没有返回0
print(a.count('r'))
print(a.count('a'))
print(a.count('p'))
>>> 2
>>> 1
>>> 0
5.1 split() & rsplit()
默认按照空格,换行,制表符分割,将字符串分割后返回列表
c = 'a b c v.f/e'
print(c.split())
>>> ['a', 'b', 'c', 'v.f/e']
指定字符进行分割
print(c.split('.'))
>>> ['a b c v', 'f/e']
maxsplit参数 指定最大分割次数
# 从左开始最大分割次数为2
c.split(maxsplit=2)
>>> ['a', 'b', 'c v.f/e']
# 从右开始最大分割次数为2
c.rsplit(maxsplit=2)
>>> ['a b', 'c', 'v.f/e']
5.2 partition() & rpartition()
partition() 在字符串中搜索分隔符。如果找到分隔符,则返回一个3元组,其中包含分隔符之前的部分、分隔符本身以及分隔符之后的部分。
如果找不到分隔符,则返回包含原始字符串和两个空字符串的3元组。
print(a.partition('r'))
print(a.partition(' '))
>>> ('ambe', 'r', 'r')
>>> ('amberr', '', '')
# rpartition()从左往右分
print(a.rpartition('r'))
>>> ('amber', 'r', '')
join()
和split()相反,把列表连接回字符串,可以指定用符号字母或者数字来进行连接。
d = ['a','b','c']
print('-'.join(d))
print(''.join(d))
>>> a-b-c
>>> abc
7.1 upper()
转换为大写
print(a.upper())
>>> AMBERR
7.2 lower()
转换为小写
print(a.upper().lower())
>>> amberr
7.3 capitalize()
首字母大写
print(a.capitalize())
>>> Amberr
7.4 title()
每个单词首字母大写
e = 'hello world'
print(e.title())
>>> Hello World
7.5 swapcase()
大小写互换
f = e.title()
print(f.swapcase())
>>> hELLO wORLD
strip() & rstrip() & lstrip()
g = ' hello '
#清除前后空格
print(g.strip())
#清除右边的空格
print(g.rstrip())
#清除左边的空格
print(g.lstrip())
>>>hello
>>> hello
>>>hello
清除前后数字或者字母。
h = '1hello11'
print(h.strip('1'))
print(h.rstrip('1'))
print(h.lstrip('1'))
>>>hello
>>>1hello
#这里指定了1,使用rstrip()后hello右边的2个1全部都清除了
>>>hello11
9.1 startswith()
判断字符串是否以指定内容开始
print(a.startswith('a'))
print(a.startswith('b'))
>>>True
>>>False
9.2 endswith()
判断字符串是否以指定内容j结束
print(a.endswith('rr'))
print(a.endswith('b'))
>>>True
>>>False
10.1 islower()
判断字符串是否都为小写
print(a)
print(a.islower())
>>>amberr
>>>True
print(f)
print(f.islower())
>>>Hello World
>>>False
10.2 isupper()
判断字符串是否都为大写
print(f)
print(f.isupper())
print(f.upper().isupper())
>>>Hello World
>>>False
>>>True
10.3 isdigit()
判断字符串是否都为数字
print(h)
print(h.isdigit())
>>>1hello1
>>>False
i = '123'
print(i.isdigit())
>>>True
10.4 isalnum()
判断字符串是否为数字字母汉字
print(h)
print(h.isalnum())
>>>1hello1
>>>True
10.5 isalpha()
判断字符串是否为字母汉字
print(h.isalpha())
print(a.isalpha())
#1hello1
>>>False
#amberr
>>>True
11.1 center()
居中对齐
# 居中对齐,输出宽度为30,不足的话用/填充
a.center(30,'/')
>>>'amberr'
11.2 ljust() & rjust()
靠左对齐 或者 靠右对齐
# 靠左对齐,输出宽度为20,不足的话用/填充
print(a.ljust(20,'/'))
>>>'amberr//'
# 靠右对齐,输出宽度为20,不足的话用/填充
print(a.rjust(20,'/'))
>>>'//amberr'
11.3 zfill()
靠左填充0
# 输出宽度为20.左侧用0填充
a.zfill(20)
>>>'00000000000000amberr'
.
设置字符串有四种方式
from datetime import datetime
today = datetime.now().strftime("%Y%m%d")
file_1 = "file_" + today + ".txt"
file_1
>>>'file_20230615.txt'
file_2 = "file_%s.txt" % today
file_2
>>>'file_20230615.txt'
file_4 = f"file_{today}.txt"
file_4
>>>'file_20230615.txt'
file_3 = "file_{}.txt".format(today)
file_3
>>>'file_20230615.txt'
因为format()最为常用 所以着重介绍一下。
如下所示,在字符串中嵌入由波括号 {} 包围的 “替换字段”,format() 用方法的参数替换 {} 的部分。
line = "{0}的身长是{1}cm,体重是{2}kg。".format("小明", 190, 105.3)
print(line)
>>>小明的身长是190cm,体重是105.3kg。
由于替换是在对应索引编号的情况下进行的,因此可以如下所示地嵌入多个相同的值。
如果简单地从左开始按顺序一对一,则可以省略索引编号
line = "{}的身长是{}cm,体重是{}kg。".format("小明", 190, 105.3)
print(line)
>>>小明的身长是190cm,体重是105.3kg。
如果想指定格式,例如对齐小数点的位数,在索引编号的右侧指定冒号:
line = "{}的身长是{:.1f}cm,体重是{:.2f}kg。".format("小明", 190, 105.3)
print(line)
>>>小明的身长是190.0cm,体重是105.30kg。
在冒号: 之后,还可以按照规则按顺序指定格式。比如下面这个例子
"{:<12,.3f}".format(12345.67)
>>>'12,345.670 '
基于上面的这个例子 整理一下每个部分的定义
符号 | 意义 |
---|---|
: | 引导符号 |
< | 左对齐 (>右对齐 ^居中对齐) |
12 | 输出的宽度 |
, | 以逗号分隔的数字格式 |
.3 | 小数点以下的位数 |
f | 类型 |
输出的宽度
最小宽度是指 “不会再变窄的宽度”,可用于想要使列的宽度一致的情况等。最小宽度不足的部分用空白 (空格) 填充。
如果数据的显示足够最小宽度,则数据部分将保持原样显示,而不会被删除。
# 默认填充左边
print("{:12.2f}".format(100))
>>>' 100.00'
# 左对齐指定填充右边
"{:<12.2f}".format(100)
>>>'100.00 '
下面的例子中,虽然指定了输出的宽度为1,但是字符串加上指定的小数位数一共有6的宽度,所以返回部分保持原样
"{:1.2f}".format(100)
>>>'100.00'
如果想用任意字符填充空白部分,在> 之前指定字符 (1个字符)。
#按照*进行填充
"{:*>20}".format("abcde")
>>>'***************abcde'
类型
符号 | 说明 |
---|---|
s | 字符串, 这是默认的,所以通常省略。 |
d | 整数 (十进制), 二进制为b,十六进制为x或X。 |
e或E | 浮点数 (指数标记), 大写 (E) 的情况下,指数标记使用e而不是E。 |
f或F | 浮点数 (小数点标记), 大写 (F) 时,nan显示为NAN,inf显示为INF。 |
要指定 “小数点以下?位”,在句点.之后用整数指定位数。
print("{:.1f}".format(0.01))
print("{:.2f}".format(0.01))
print("{:.5f}".format(0.01))
>>>0.0
>>>0.01
>>>0.01000
指数标记时使用e或E。
print("{:.1e}".format(0.01))
print("{:.2e}".format(0.01))
print("{:.5e}".format(0.01))
print("{:.5E}".format(0.01))
>>>1.0e-02
>>>1.00e-02
>>>1.00000e-02
>>>1.00000E-02
如果将此位数指定用于字符串类型,则可以指定最多使用多少个字符。
print("{:.2}".format("abcde"))
print("{:.3}".format("abcde"))
print("{:.7}".format("abcde"))
>>>ab
>>>abc
>>>abcde
索引编号的指定
在字符串中嵌入 {关键字},format() 如果在括号中输入关键字 = 要替换的值,则可以替换 {关键字} 的部分。
一般用于固定内容的定型作业,注明关键字提高可读性。
mail_body_temp = """{company}
{name} 様
一直以来承蒙您的关照。这次我们将在本公司进行研讨会,期待您的参加。
"""
mail_body = mail_body_temp.format(company="XX株式会社", name="山川")
print(mail_body)
>>>XX株式会社
山川 様
一直以来承蒙您的关照。这次我们将在本公司进行研讨会,期待您的参加。