python之字符串处理

python之字符串处理

本篇文章对python语言中的字符串处理相关知识进行了汇总整理,希望帮助python初学者更系统的掌握一些字符串相关的基本操作。

内置字符串运算符

1.字符串的运算

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

2.字符串排序规则

小写字母编码整体大于大写字母编码。有多个字母时,从第一位开始按照顺序判断

print('A<a','A'<'a')
print('aBc<aBa','aBc'<'aBa')

>>> A<a True
>>> aBc<aBa  False

.

内置字符串处理函数

1.返回字符串长度

len()

len(a)

>>>6

2.转换为字符串

str()

b = 123
print(b,type(b))
print(str(b),type(str(b)))

>>>123 <class 'int'>
>>>123 <class 'str'>

3.字符串查找

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

4.查找计数

count()
返回在字符串中出现的次数 没有返回0

print(a.count('r'))
print(a.count('a'))
print(a.count('p'))

>>> 2
>>> 1
>>> 0

5.分割

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', '')

6.连接

join()
和split()相反,把列表连接回字符串,可以指定用符号字母或者数字来进行连接。

d = ['a','b','c']
print('-'.join(d))
print(''.join(d))

>>> a-b-c
>>> abc

7.大小写转换

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

8.删除前后空格以及字符

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.判断字符串开始或者结束

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.判断类型

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.字符串排版

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'

.

设置字符串的格式

设置字符串有四种方式

1. 使用合并运算符

from datetime import datetime 
today = datetime.now().strftime("%Y%m%d") 
file_1 = "file_" + today + ".txt"
file_1

>>>'file_20230615.txt'

2. 使用%

file_2 = "file_%s.txt" % today
file_2

>>>'file_20230615.txt'

3. 使用f-string

file_4 = f"file_{today}.txt"
file_4

>>>'file_20230615.txt'

4. 使用format()

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株式会社  
山川 様  
  
一直以来承蒙您的关照。这次我们将在本公司进行研讨会,期待您的参加。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值