python学习笔记--NO.4 字符串操作

本文详细介绍了Python字符串的各种操作,包括大小写转换、填充对齐、判断与转换、统计查找替换、切割连接、格式化以及编码解码。涵盖了capitalize()、lower()、title()、center()等核心函数的使用实例和实战应用。
摘要由CSDN通过智能技术生成

NO.4 字符串操作

思维导图

在这里插入图片描述

一、大小写转换

1.capitalize()–字符串首字母大写

语法:
str.capitalize()

注意
此类方法都是返回一个字符串,而不是改变原来字符串

1.1 全是大写是只保留首字母大写

str.lower().capitalize()

1.2 指定位置字符串首字母大写

对字符串截取后使用该方法

sentence = "hello world"
print(sentence[0:6]+sentence[6:].capitalize())
结果:
hello World

2.lower()/casefold()–大写转小写

语法:
str.lower()
str.casefold()

两者区别:lower()只对ASCII编码有效,即’A-Z’,casefold()对所有大写都有效

2.1 判断英文句子是否回文

sentence = "Able was I ere I saw Elba"
def is_reversed(cn):
    en = cn.casefold()
    if list(en) == list(reversed(en)):
        print("是回文")
    else:
        print("不是回文")

is_reversed(sentence)
结果:
是回文

注意
reversed()方法是返回倒序字符串
由于两个字符串不能直接用==比较,所以要转换成列表类型进行比较

3.swapcase()–大小写互换

语法:
str.swapcase()

sentence = "Hello World"
print(sentence.swapcase())
结果:
hELLO wORLD

4.title()–每个字母首字母都大写

sentence = "hello world"
print(sentence.title())
结果:
Hello World

5.upper()–小写转大写

和lower()是一对

sentence = "Hello World"
print(sentence.upper())
结果:
HELLO WORLD

二、填充与对齐

1.center()–居中填充

语法:
str.center(width[,fillchar])

sentence = "Hello World"
print(sentence.center(20,'-'))
结果:
----Hello World-----

2.ljust()–左对齐填充

语法:
str.ljust(width[,fillchar])

sentence = "Hello World"
print(sentence.ljust(20,'-'))
结果:
Hello World---------

3.rjust()–右对齐填充

语法:
str.rjust(width[,fillchar])

sentence = "Hello World"
print(sentence.rjust(20,'-'))
结果:
---------Hello World

三、判断字符串

以下方法返回值都是bool类型,即true 或者 false
语法都为:str.方法名()

1.isalnum()–是否由字母和数字组成

2.isalpha()–是否只由字母组成

3.isdigit()–是否只由数字组成

4.islower()–是否只由小写字母组成

5.isdecimal()–是否只包含十进制字符

6.isidentifier()–是否由为合法的标识符

7.isnumeric()–是否只由数字组成

8.isprintable()–是否为可打印字符

9.isspace()–是否只由空格组成

10.istitle()–是否首字母大写

11.isupper()–是否只由大写字母组成

四、统计、查找、替换

1.count()–统计字符出现次数

语法:
str.count(sub,start,end)

sub: 字符子串
start/end: 起止点,结束位置不包含
无起止点则遍历整个字符串

sentence = "Hello World,i am bobby,goodbye"
print(sentence.count('o'))
print(sentence.count('l',0,9))
print(sentence.count('l',0,10))
结果:
5
2
3

2.endswith()/startswith()–是否以指定字串结尾/开头

语法:
str.endswith(sub,start,end)
str.startswith(sub,start,end)

sentence = "www.baidu.com"
print(sentence.endswith('.com'))
print(sentence.endswith('du',0,9))

print(sentence.startswith('www'))
print(sentence.startswith('baidu',4))
结果:
True
True
True
True

3.find()和index()–字符串首次出现的索引位置

语法:
str.find(sub,start,end)
str.index(sub,start,end)

两个方法都返回子串首次出现的索引位置
不同点在于未查到时:
find()返回-1
index()返回ValueError

sentence = "hello world"
print(sentence.find('world'))
print(sentence.find('world',0,10))
print(sentence.index('world'))
print(sentence.index('pig'))
结果:
6
-1
6
Traceback (most recent call last):
  File "F:/python_project/test.py", line 5, in <module>
    print(sentence.index('pig'))
ValueError: substring not found

4.rfind()和rindex()–字符串最后一次出现的位置

语法:
str.rfind(sub,start,end)
str.rindex(sub,start,end)

查找顺序是从右向左查询

两个方法都返回子串最后一次出现的索引位置
不同点在于未查到时:
find()返回-1
index()返回ValueError

sentence = "hello world"
print(sentence.rfind('l'))
print(sentence.rfind('world',0,5))
print(sentence.rindex('l',0,3))
print(sentence.index('pig'))
结果:
9
-1
2
Traceback (most recent call last):
  File "F:/python_project/test.py", line 5, in <module>
    print(sentence.index('pig'))
ValueError: substring not found

一个应用:返回网页中最后一个’’/’‘和倒数第二个’’/’'直接的内容

sentence = "https://baike.baidu.com/item/%E7%BD%91%E9%A1%B5/99347?fr=aladdin"
end_index = sentence.rfind('/')+1
start_index = sentence.rfind('/',0,end_index-1)
sentence_2 = sentence[start_index:end_index]
print(sentence_2)

结果:
/%E7%BD%91%E9%A1%B5/

5.len()–字符串长度

语法:
len(s)

s:可以是字符串,列表,字典,元组等
字符串就返回字符个数,包括空格
列表,字典,元组就返回元素个数

sentence = "hello world"
sentence2 = " hello world "
list1 = ['1','2','3']
tuple1 = (1,2,3)
dict1 = {'1':'dog','2':'pig'}
print(len(sentence),len(sentence2))
print(len(list1),len(tuple1),len(dict1))
结果:
11 13
3 3 2

6.replace()–替换字符串

语法:
str.replace(old,new,count)

old::需要被替换的字符串
new:用于替换old,不指定则直接删去原字符
count:替换次数,可选参数,不指定则替换所有字符,顺序是从左到右

①下面是一个关于数据清洗的应用:

import string
sentence = "这段1话有很$2%多标点&符4号和*数,字,我们.要对它,进行5处理,所有_6我!要使用--rep7lace方法。"
#string.punctuation->包含所有的标点字符,中文标点不在内
#string.digits->数字
for c in string.punctuation:
    sentence = sentence.replace(c,'')
print(sentence)

for c in string.digits:
    sentence = sentence.replace(c,'')
print(sentence)

结果:
这段1话有很2多标点符4号和数字,我们要对它进行5处理,所有6我要使用rep7lace方法。
这段话有很多标点符号和数字,我们要对它进行处理,所有我要使用replace方法。

②下面是身份证打码应用:

dict1 = {
    '张三':'510117536440185340',
    '李四':'905908863402397700',
    '王五':'817317291207113700',
    '艾米利亚':'131901517548183700',
    '雷姆':'675142893919250600',
    '拉姆':'383337987034708000',
}
for key,value in dict1.items():
    print(key+':'+value.replace(value[4:8],'****'))
结果:
张三:5101****6440185340
李四:9059****3402397700
王五:8173****1207113700
艾米利亚:1319****7548183700
雷姆:6751****3919250600
拉姆:3833****7034708000

7.splitlines()–返回(不)包含换行符的列表

语法:
str.splitlines(true/false)

此方法按照换行符(’\r’,’\n’,’\r\n’)分割,返回一个是否包含换行符的列表
默认为Fasle,表示不包含换行符
True,表示包含换行符

‘\r’,’\n’,’\r\n’的区别

\r:回车,回到当前行的最开始,继续输出则覆盖本行原语句
\n:换行,换到当前位置的下一行
\r\n:键盘的enter就是\r\n

sentence = "www.baidu.com\nwww.tina.com\r\nwww.tencent.com"
print(sentence)
print(sentence.splitlines())
print(sentence.splitlines(True))
结果:
www.baidu.com
www.tina.com
www.tencent.com
['www.baidu.com', 'www.tina.com', 'www.tencent.com']
['www.baidu.com\n', 'www.tina.com\r\n', 'www.tencent.com']

五、截取、分割、分割

1. ‘:’切片

语法:
str[ start : end : step ]
step:切片步长,省略时可以一起省略‘:’
start:默认为0
end:默认为字符串长度
在这里插入图片描述

sentence = "吴京:这里是中国"
print(sentence[0:2])
print(sentence[3::2])
print(sentence[::2])
print(sentence[:-2])
结果:
吴京
这是国
吴:里中
吴京:这里是

翻转字符串:

sentence = "hello world"
sentence_rev = sentence[::-1]
print(sentence_rev)
结果:
dlrow olleh

2. lstrip()、rstrip()、strip()–去除两边指定字符

语法:
str.lstrip(chars) --> 去左
str.rstrip(chars)) --> 去右
str.strip(chars)) --> 去两边

chars:指定的字符串,为空时就默认删除空格
匹配是从两边(左、右)开始匹配,遇到不符合时的停止

sentence = "***hello world---"
print(sentence.lstrip('*'))
print(sentence.rstrip('-'))
print(sentence.strip('*').strip('-'))
结果:
hello world---
***hello world
hello world

2. split()–分割字符串为列表

split()方法将字符串按照分隔符分割成字符串列表并返回

语法:
str.split( sep , maxsplit )
sep: 指定分隔符,可以包含多个字符,默认为None
maxsplit: 可选参数,指定分割次数,不指定或-1则分割次数不限

sentence = "www.baidu.com"
print(sentence.split('.'))
print(sentence.split('.',1))
结果:
['www', 'baidu','com']
['www', 'baidu.com']

3. partiton()、rpartiton()–分割字符串为元组

partiton()方法将字符串按照分隔符分割成字符串元组并返回
但是只能分割成一个三元的元组

rpartiton()方法从右向左找分隔符进行分割

语法:
str.partiton(char)

sentence = "www.baidu.com"
print(sentence.partition('.'))
print(sentence.rpartition('.'))
结果:
('www', '.', 'baidu.com')
('www.baidu', '.', 'com')

六、连接

1. join()–连接字符串、元组、列表、字典

语法:
str.join(sequence)
str: 分隔符,用什么来连接字符串
sequence: 可以是字符串、元组、列表、字典

返回值是一个字符串

dict1 = ['www.baidu.com','是','百度']
print(''.join(dict1))
结果:
www.baidu.com是百度

2. ‘+’,‘,’等操作符连接

2.1 直接连接

print('www.''baidu.''com')
结果:
www.baidu.com

2.2 ‘+’ ,‘,’连接

str1 = 'www.'
str2 = 'baidu.'
str3 = 'com'
print(str1+str2+str3)
print(str1,str2,str3)#输出会自带空格,可用sep=来消除
结果:
www.baidu.com
www. baidu. com

2.3 ‘*’ 实现拷贝

print('name '*3)
结果:
name name name 

七、格式化

1. f-string

python3.6后推荐使用此方法,功能非常强大
语法:
n = f’{s1}{s2}{s3}…’

1.1 连接字符串

str1 = 'www.'
str2 = 'baidu.'
str3 = 'com'
print(f'{str1}{str2}{str3}')
结果:
www.baidu.com

1.2 指定替换内容和函数调用

name = 'wu jing'
print(f'my name is {name}')
print(f'my name is {name.title()}')

结果:
my name is wu jing
my name is Wu Jing

1.3 进制转换

a = 12345
print(f'二进制: {a:^#10b}')#居中,宽度10,二进制整数
print(f'十进制: {a:^#10d}')
print(f'八进制: {a:^#10o}')
print(f'十六进制: {a:^#10X}')
结果:
二进制: 0b11000000111001
十进制:   12345   
八进制:  0o30071  
十六进制:   0X3039  

1.4 对齐

a = '吴京'
print(f'左对齐: {a:<10}')
print(f'右对齐: {a:>10}')
print(f'居中: {a:^10}')
结果:
左对齐: 吴京        
右对齐:         吴京
居中:     吴京    

2. zfill()方法–填充0

语法:
str.zfill(width)
在字符串前面补零,补够位数即可

3.format()和’%'格式化

详情见前章

八、转换

1.encode()编码和decode()解码

a = '吴京是战狼'
b = a.encode('utf-8')
print(a)
print(a.encode('utf-8'))
print(b)
print(b.decode('utf-8'))
结果;
吴京是战狼
b'\xe5\x90\xb4\xe4\xba\xac\xe6\x98\xaf\xe6\x88\x98\xe7\x8b\xbc'
b'\xe5\x90\xb4\xe4\xba\xac\xe6\x98\xaf\xe6\x88\x98\xe7\x8b\xbc'
吴京是战狼
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值