Python3中String(字符串)操作详解
String(字符串)作为Python中的基础数据类型之一,在每个项目中都必然会用到。我们经常需要对字符串进行一些列的操作,比如:拼接、查找、比较、设置对齐、拆分、截取、搜索、替换、组合、编码等等操作。那么,对于字符串的操作有个一个详细地了解就显得十分必要。以下是部分String的操作方法:
大小写操作
在英文中、页面的展示中,我们经常需要对字符串进行大小写转换的操作。如全部转换成大写、小写、首字母大写等。
全部转换成大写 -> string.upper()
str = 'louis drink'
str.upper() # 'LOUIS DRINK'
使用upper()方法,会将字符串中的所有英文字母转换成大写格式。
全部转换成小写 -> string.lower()
str = 'LOUIS DRINK'
str.lower() # 'louis drink'
使用lower()方法,会将字符串中的所有英文字母转换成小写格式。
首字母大写 -> string.capitalize()
str = 'louis drink'
str.capitalize() # 'Louis drink'
使用capitalize()方法,会将整个字符串的首字母转换成大写格式。
所有单词首字母大写 -> string.title()
str = 'louis drink'
str.title() # 'Louis Drink'
使用title()方法,会将整个字符串中的每一个单词的首字母转换成大写格式。
查询 -> string.index() / string.find()
Python3中的字符串的查询有两种方法,分别是string.index()与string.find方法。两者有细微差别:
name = 'Louis Drink'
name.index('i') # 3
name.index('a') # 崩溃
name.find('i') # 3
name.find('a') # -1
从上述代码中,我们不难看出,当查询字符串中确定有的子字符串的情况下,string.index()方法和string.find()的方法没有区别,都是返回的字符串中所含有的子字符串的首字母的下标位置。
然而当在查询字符串中没有含有的子字符串的情况下,string.index()方法会直接崩溃,而string.find()方法是返回一个int类型的数字-1。在这种情况下,显然string.find()方法会更具有容错性,所以在开发中,推荐使用string.find()方法。
统计 -> string.count()
name = 'Louis Drink'
name.count('i') # 2
string.count()方法是用来统计,该子字符串在字符串中出现的次数。如我们在上述例子中,统计字符串'i'在name中出现了几次。返回结果2则表示'i'在name中,一共出现了两次。
字符串拼接
我们在调试、展示页面、返回信息的时候,经常会使用固定语句格式拼接上一些我们的变量,如,'欢迎{人名}莅临检查!'中,人名就是一个变量。那么字符串的拼接有几种方法呢?
使用+直接拼接
first_name = 'Drink'
last_name = 'Louis'
str = last_name + ' ' + first_name # 'Louis Drink'
几个字符串可以直接使用+来拼接起来,格式就如上述代码所示。
使用占位符拼接
name = 'Drink'
place = 'Xiamen'
'Hello %s, welcome to %s!' %(name, place)
# 'Hello Drink, welcome to Xiamen!'
这里使用%s占位符,表示在该地方需要拼接入一个字符串参数。同时这里也可以替换成其他的占位符,详细的占位符信息请查看:Python3中的占位符详解。
使用格式码拼接 -> string.format()
name = 'Drink'
place = 'Xiamen'
'Hello {}, welcome to {}!' .format(name, place)
# 'Hello Drink, welcome to Xiamen!'
使用.format方法的话,可以直接用{}代替占位符,来标记我们需要添加信息的位置。每一个{}对应一个需要拼接的地方,所以后面.format里的参数一定要与前边的{}数量一致。
.format()拼接还有另一种更清晰的方式,但是使用起来相对麻烦。
name = 'Drink'
place = 'Xiamen'
'Hello {person_name}, welcome to {person_city}!' .format(person_name = name, person_place = place)
# 'Hello Drink, welcome to Xiamen!'
Python3中特有的拼接方式
name = 'Drink'
place = 'Xiamen'
f'Hello {name}, welcome to {place}!'
# 'Hello Drink, welcome to Xiamen!'
我们可以在字符串前加个字母f,然后直接在字符串中的{}中填入我们需要拼接的变量名称,就可以直接拼接。使用这种方法,无需在字符串后面再去书写%(变量名)或.format(变量名)。会更为简洁和清晰。推荐使用这种方法!
对齐 -> string.center() / string.ljust() / string.rjust()
在开发中,为了保证美观,我们常常会需要使字符串居中、左对齐、右对齐等,这就需要用到对齐的操作方法。
name = 'Louis Drink'
name.center(40) # ' Louis Drink '
name.ljust(40, '-') # 'Louis Drink-----------------------------'
name.rjust(40, ) # ' Louis Drink'
从上述的代码中不难看出,string.center(), string.ljust(), string.rjust分别是对应居中对齐、左对齐、右对齐的方法。每个方法都有两个参数:
- 第一个参数:width(宽度)(必填)
- 第二个参数:填充符(不填默认填充空格)
以什么结束 -> string.endswith()
name = 'Louis Drink'
name.endswith('k') # True
name.endswith('nk') # True
name.endswith('i') # False
使用string.endswith()方法时,会去判断字符串的最后的子字符串与你在方法中填入的字符串是否相同。结果返回bool类型的True或False。
判断
'123'.isalnum() # True
'123abc'.isalnum() # True
'123.abc'.isalnum() # False
'abc'.isalpha() # True
'123abc'.isalpha() # False
'123'.isdigit() # True
'123.123'.isdigit() # False
'abc'.isidentifier() # True
'abc123'.isidentifier() # True
'123abc'.isidentifier() # False
'123'.isidentifier() # False
''abc.123'.isidentifier()' # False
'LOUIS DRINK'.isupper() # True
'Louis Drink'.isupper() # False
'louis drink'.islower() # True
'Louis Drink'.islower() # False
'123'.isdecimal() # True
'一二三'.isdecimal() # False
'一二三'.isnumeric() # True
在字符串中,有几种比较常见的判断方法,分别是:
- string.isalnum() -> 判断字符串中是否全部为数字或者英文
- string.isalpha() -> 判断字符串中是否全部为纯英文字符
- string.isdigit() -> 判断字符串中是否全部为整数
- string.isidentifire() -> 判断字符串是不是一个合法的标识符
- string.isupper() -> 判断字符串中是否全是大写字母
- string.islower() -> 判断字符串中是否全是小写字母
- string.isdecimal() -> 判断是否是十进制数字
- string.isnumeric() -> 判断是否是可做标记用的数字,包含数字、分数、特殊标记字符和中文,但不包含英文
- 判断范围:string.isnumeric() > string.isdigit() > string.isdecimal()
Tips 标识符的规则:
- 必须以字母或下划线开始
- 不能与保留字相同
- 避免与Python中已有的标识符相同
替换 -> string.replace()
name = 'Louis Drink'
name.replace('Drink', 'Lu', 1) # 'Louis Lu'
使用string.replace()方法的时候,需要传三个参数,他们依次分别是:
- 第一个参数:old_value,就是字符串中现有的要替换的内容
- 第二个参数:new_value,就是要将现有内容替换掉的内容
- 第三个参数:count,就是要替换的个数
如上述例子中,我们要把现有的'Drink'替换成'Lu',替换的个数为1。
Tips:最后的count可不填,如果不填写数量的话,默认替换掉字符串中所有的old_value。
拆分 -> string.split()
mail = 'louisdrink@163.com'
mail.split('@') #['louisdrink', '163.com']
使用string.split()方法的时候,会先去判断该字符串里面有没有我们要拆分的字符。
如果有的话,会返回一个列表,里面包含两个字符串,分别是我们要拆分的字符之前的字符串和之后的字符串,但不包含我们要拆分的字符。
如果没有的话,仍然会返回一个列表,但是列表里只有一个元素,那就是我们原本要进行拆分的字符串。
另外,还有个方法是换行拆分:string.splitlines()。用途是,如果该字符串里有换行符的话,会按换行符前后自动拆分成一个个元素,然后组成一个列表。如果没有换行符,仍然返回一个元素的列表。
连接列表 ->string.join()
singers = ['周杰伦', '林俊杰', '陈奕迅', '李宗盛', '薛之谦']
'--'.join(singers) # '周杰伦--林俊杰--陈奕迅--李宗盛--薛之谦'
使用string.join()来连接字符串列表,会将字符串、元组、列表中的元素以指定的字符(分隔符)连接成一个新的字符串。
去除空格或指定字符 -> string.strip()
name = ' Louis Drink '
name.strip() # 'Louis Drink'
name.lstrip() # 'Louis Drink '
name.rstrip() # ' Louis Drink'
name = 'Louis Drink'
name.lstrip('L') # 'ouis Drink'
name.rstrip('k') # 'Louis Drin'
使用string.strip系列方法,需要注意一下几个点:
- string.strip()系列方法,可填要删除的字符串,如果不填字符串,则默认删除空格
- string.strip()为删除两边开始的指定字符串
- string.lstrip()为删除左边开始的指定字符串
- string.rstrip()为删除右边开始的指定字符串
- 如果指定字符串在句子中间,则不会被删除