Python字符串类型

目录

目标

版本

官方文档

书写格式

字符串合并

常用函数

字母转小写(首字母转大写)

字母转小写(适用于在国际化环境中,忽略字母大小写进行比较的场景)

字母转小写(适用于非国际化环境中,忽略字母大小写进行比较的场景)

字母转大写

字母大写转小写,小写转大写。

字符串填充(原字符串居中)

字符串填充(原字符串居左)

字符串填充(原字符串居右)

字符串填充0(原字符串居右)

统计出现的字符串次数(不重叠计算)

将字符串转字节序列

后缀是否匹配

前缀是否匹配

替换制表符、换行符、回车符

查询子字符串在原字符串的位置

字符串动态构建

映射对象属性

判断字符串是否只包含字母和数字,且至少包含一个字符。

判断字符串是否只包含字母,且至少包含一个字符。

判断字符串是否都由ASCII字符组成

判断字符串是否由十进制数字组成

判断字符串是否由数字组成(包括非十进制数字)

判断字符串中的字母是否都是小写,且至少包含一个小写字母。

判断字符串是否都由数字组成,且不为空字符串。

检查字符串中的所有字符是否都是可打印字符,或者字符串是否为空。

检查字符串中的所有字符是否都是空白字符,并且至少包含一个字符。

将字符串设置为标题格式

检查字符串是否符合标题格式。

判断字符串中的字母是否都是大写,且至少包含一个大写字母。

将可迭代对象中的字符串连成一个字符串,连接符可以自定义。

去掉字符串两边的空格(默认)和其他字符(如果指定了)

去掉字符串左边的空格(默认)和其他字符(如果指定了)

去掉字符串右边的空格(默认)和其他字符(如果指定了)

翻译表

在字符串中找到第一个指定的分隔符,并返回元组。

剔除字符串开头部分指定的字符串参数

剔除字符串结束部分指定的字符串参数

替换字符串中的子字符串,可配置替换次数(默认替换所有)。

拆分字符串,返回列表。

将字符串按行分隔,返回包含行的列表。


目标

掌握字符串类型的使用方法。本文参考官方文档列举了各种字符串方法的使用方法,如有错误烦请指正。


版本

Python 3.12.0


官方文档

Text Sequence Type --- strhttps://docs.python.org/3/library/stdtypes.html#text-sequence-type-str


书写格式

官方定义:

  • Single quotes: 'allows embedded "double" quotes'

  • Double quotes: "allows embedded 'single' quotes"

  • Triple quoted: '''Three single quotes''', """Three double quotes"""

译文:

bash 复制代码
单引号:单引号可以嵌入双引号,例如:'I "LOVE" YOU'
双引号:双引号可以嵌入单引号,例如:"I 'LOVE' YOU"
三个单引号:例如:'''I LOVE YOU'''
三个双引号:例如:"""I LOVE YOU"""

案例:

python 复制代码
print('I "LOVE" YOU')
print("I 'LOVE' YOU")
print('''I LOVE YOU''')
print("""I LOVE YOU""")

注意:

Python中,三个引号有两个作用:

  • 使用三引号可以在一个字符串中包含多行文本。
  • 三个引号可以写下多行注释
python 复制代码
'''
输出:
I
LOVE
YOU

'''
print('''I 
LOVE 
YOU
''')

"""
输出:
I 
LOVE 
YOU

"""
print("""I 
LOVE 
YOU
""")

字符串合并

情景一

字符串之间只有空格,则会隐式地转换为单个字符串。

案例

python 复制代码
a="123"   "456"
b="123456"
#返回:True 1805713063440 1805713063440
print(a==b,id(a),id(b))

情景二

字符串用**+**连接。

案例

python 复制代码
a="123456"
b="123"+"456"
#返回:True 2281180461648 2281180461648
print(a==b,id(a),id(b))

情景三

用**%s**连接。

python 复制代码
a = "123"
b = "456"
#返回:123456
result = "%s%s" % (a, b)
print(result)

情景四

用**{}**连接。

python 复制代码
a = "123"
b = "456"
#返回:123456
result = "{}{}".format(a,b)
print(result)

情景五

在字符串前加f引用变量

python 复制代码
a = "123"
b = "456"
#返回:123456
result = f"{a}{b}"
print(result)

情景六

使用join 方法将列表中的元素拼接成一个字符串。

python 复制代码
a = ["123","456"]
result = "".join(a)
#返回:123456 <class 'str'>
print(result,type(result))

常用函数

字母转小写(首字母转大写)

转换后的字符串是一个新的字符串。从下面案例中的id值可以看出。

案例

python 复制代码
#输出:I love you.
print("I LOVE YOU.".capitalize())
#输出:I love you.
print("i love you.".capitalize())

a="I love you."
b=a.capitalize()
#输出:I love you. I love you. 2532951714032 2532951257840
print(a,b,id(a),id(b))

字母转小写(适用于在国际化环境中,忽略字母大小写进行比较的场景)

该方法的实现遵循Unicode标准中描述的大小写折叠算法。可以将特殊字符转换为小写形式,比lower()函数更为彻底。

案例

python 复制代码
a="I LOVE YOU.".casefold()
b="I love you.".casefold()
#输出:i love you. i love you. True 2692128699120 2692128698480
print(a,b,a==b,id(a),id(b))

c="ß".casefold()
d="ss"
#输出:True
print(c==d)

字母转小写(适用于非国际化环境中,忽略字母大小写进行比较的场景)

案例

python 复制代码
a="I LOVE YOU."
#输出:i love you.
print(a.lower())

字母转大写

案例

python 复制代码
a="i love you."
#输出:I LOVE YOU.
print(a.upper())

字母大写转小写,小写转大写。

案例

python 复制代码
a = "Hello world!"
#输出:hELLO WORLD!
print(a.swapcase())

字符串填充(原字符串居中)

center(width,fillchar)函数有两个参数。它的作用是:将原始字符串居中放置在长度为width的字符串中,并使用字符fillchar进行填充。fillchar默认为空格。如果原字符串长度大于或等于width,则没有fillchar进行填充。

案例

python 复制代码
a="123".center(10)
#输出:   123     长度: 10
print(a,"长度:",len(a))
#输出:---123---- 长度: 10
b="123".center(10,"-")
print(b,"长度:",len(b))

字符串填充(原字符串居左)

类比center函数。

案例

python 复制代码
a="123".ljust(10)
#输出:123        长度: 10
print(a,"长度:",len(a))
#输出:123------- 长度: 10
b="123".ljust(10,"-")
print(b,"长度:",len(b))

字符串填充(原字符串居右)

类比center函数。

案例

python 复制代码
a="123".rjust(10)
#输出:       123 长度: 10
print(a,"长度:",len(a))
#输出:-------123 长度: 10
b="123".rjust(10,"-")
print(b,"长度:",len(b))

字符串填充0(原字符串居右)

案例

python 复制代码
a = "1"
#输出:00001 <class 'str'>
print(a.zfill(5),type(a.zfill(5)))

b = "-9"
#输出:-0009 <class 'str'>
print(b.zfill(5),type(b.zfill(5)))

c= "hello"
#输出:000hello <class 'str'>
print(c.zfill(8),type(c.zfill(8)))

#输出:hello <class 'str'>
print(c.zfill(2),type(c.zfill(2)))

统计出现的字符串次数(不重叠计算)

案例

python 复制代码
a="I LOVE YOU."
#输出:1
#分析:在I LOV中寻找LOV,看一共出现了几次。
print(a.count("LOV",0,5))

b="1111"
#输出:2
#分析:在1111中寻找11出现的次数。特别注意,这个函数不会重叠计算,所以中间两个1不会统计。
print(b.count("11",0, len(b)))

将字符串转字节序列

案例

python 复制代码
a="你好,世界!"
#将字符串编码为字节序列(默认使用UTF-8编码)
by = a.encode()
#输出:b'\xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\x8c\xe4\xb8\x96\xe7\x95\x8c\xef\xbc\x81' <class 'bytes'>
print(by,type(by))

#指定编码方式为'UTF-8',将字符串编码为字节序列
by2 = a.encode(encoding='UTF-8')
#输出:b'\xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\x8c\xe4\xb8\x96\xe7\x95\x8c\xef\xbc\x81' <class 'bytes'>
print(by2,type(by2))

后缀是否匹配

案例

python 复制代码
a="123"
#输出:True
print(a.endswith("23"))

前缀是否匹配

案例

python 复制代码
a="123"
#输出:False
print(a.startswith("23"))

替换制表符、换行符、回车符

案例

python 复制代码
a= "hello\tworld.\nhello\rPython."
'''
分析:\t表示制表符;\n表示换行符;\r表示回车符。回车符会使得前一个元素消失。所以第二个hello没有打印出来。
输出:
hello   world.
Python.
'''
print(a.expandtabs())

b= "hello\tworld"
#输出:hello           world
#分析:一个制表符用16个空格代替。
print(b.expandtabs(tabsize=16))

查询子字符串在原字符串的位置

案例一(从左边开始寻找)

调用find函数查找子字符串,找不到会返回-1。

python 复制代码
index = "hello python".find("python")
#输出:6
#分析:下标从0开始寻找,python在字符串的第7位
print(index)

index2 = "hello python python".find("python",7,64)
#输出:13
#分析:下标从7开始寻找,python在字符串的第13位
print(index2)

index = "hello python".find("world")
#输出:-1
#分析:字符串不包含world
print(index)

案例二(从右边开始寻找)

python 复制代码
index = "hello python".rfind("python")
#输出:6
#分析:python在字符串的第7位出现。
print(index)

index2 = "hello python python python".rfind("python",0,15)
#输出:6
#分析:在0至15之间寻找python,python在字符串的第6位出现。
print(index2)

index = "hello python".rfind("world")
#输出:-1
#分析:字符串不包含world
print(index)

案例三(从左边开始寻找)

调用index函数查找子字符串,找不到会报错。

python 复制代码
a = "hello world world world world"
#输出:索引位置: 6
print("索引位置:", a.index("world"))
#输出:索引位置: 18
#分析:从第15位开始寻找,第一次出现world的位置是19位。
print("索引位置:", a.index("world",15))
#输出:索引位置: 24
#分析:从第19位开始寻找,第一次出现world的位置是25位。
print("索引位置:", a.index("world",19, len(a)))

b = "hello world"
try:
    index = b.index("Python")
    print("索引位置:", index)
except ValueError as e:
    #输出:未找到子串: substring not found
    print("未找到子串:", e)

案例四(从右边开始寻找)

调用rindex函数查找子字符串,找不到会报错。

python 复制代码
a = "hello world world world world"
#输出:索引位置: 24
print("索引位置:", a.rindex("world"))
#输出:索引位置: 24
print("索引位置:", a.rindex("world",15))
#输出:索引位置: 12
print("索引位置:", a.rindex("world",5,19))

b = "hello world"
try:
    index = b.rindex("Python")
    print("索引位置:", index)
except ValueError as e:
    #输出:未找到子串: substring not found
    print("未找到子串:", e)

字符串动态构建

案例

python 复制代码
a = "I love you {} times {} day."
b=a.format(3000,"a")
#输出:I love you 3000 times a day.
print(b)

映射对象属性

案例

python 复制代码
#定义一个字典子类作为映射
class Student(dict):
    def __missing__(self, key):
        return f"Key {key} not found"

#创建一个字典子类的实例
mapping = Student({'name': 'zhangsan', 'age': 30})
template = "I am {name} , I am {age} years old, I LOVE {obj}."
#格式化
formatted_string = template.format_map(mapping)
#输出:I am zhangsan , I am 30 years old, I LOVE Key obj not found.
print(formatted_string)

判断字符串是否只包含字母和数字,且至少包含一个字符。

案例

python 复制代码
a = "abc"
b="I LOVE YOU."
c="123"
d=""
#输出:True False True False
#b含有空格和.所以返回False
#d不符合至少有一个字符的条件,所以返回False
print(a.isalnum(),b.isalnum(),c.isalnum(),d.isalnum())

判断字符串是否只包含字母,且至少包含一个字符。

案例

python 复制代码
a = "abc"
b="I LOVE YOU."
c="123"
d=""
#输出:True False False False
#b含有空格和.所以返回False
#c不是字母组成的字符串。
#d不符合至少有一个字符的条件,所以返回False
print(a.isalpha(),b.isalpha(),c.isalpha(),d.isalpha())

判断字符串是否都由ASCII字符组成

案例

python 复制代码
a = "Hello World!"
b = "Hello世界!"
c=""
#输出:True False
#分析:a中所有元素由ASCII字符组成。b字符串中不全是ASCII表中的字符,所以返回False。当字符串为空字符串时,该方法也返回True。
print(a.isascii(),b.isascii(),c.isascii())

判断字符串是否由十进制数字组成

案例

python 复制代码
a = "Hello World!"
b = "3.14"
c="10086"
d=""
#输出:False False True False
print(a.isdecimal(),b.isdecimal(),c.isdecimal(),d.isdecimal())

判断字符串是否由数字组成(包括非十进制数字)

案例

python 复制代码
a = "Hello World!"
b = "3.14"
c="10086"
d=""
#输出:False False True False
print(a.isdigit(),b.isdigit(),c.isdigit(),d.isdigit())

判断字符串中的字母是否都是小写,且至少包含一个小写字母。

注意

  1. 这里只判断字符串中的字母部分,非字母部分不做判断。
  2. 如果字符串中没有一个字母,则返回False。
  3. 空字符串返回False。

案例

python 复制代码
a = "Hello World!"
b = "hi"
c="a,b,c"
d="www.hao123.com"
e=""
f="123"
#输出:False True True True False False
print(a.islower(),b.islower(),c.islower(),d.islower(),e.islower(),f.islower())

判断字符串是否都由数字组成,且不为空字符串。

包括:普通数字字符和具有Unicode数值属性的所有字符。

案例

python 复制代码
a = "Hello World!"
b = "123"
c="3.14"
d="-1"
e=""
#输出:False True False False False
print(a.isnumeric(),b.isnumeric(),c.isnumeric(),d.isnumeric(),e.isnumeric())

检查字符串中的所有字符是否都是可打印字符,或者字符串是否为空。

python 复制代码
a = "Hello \n World!"
b = "123\t"
c="3.14\r"
d="-1"
e=""
#输出:False False False True True
print(a.isprintable(),b.isprintable(),c.isprintable(),d.isprintable(),e.isprintable())

检查字符串中的所有字符是否都是空白字符,并且至少包含一个字符。

案例

python 复制代码
a = "Hello World!"
b = " "
c="\t"
d="\n"
e=""
#输出:False True True True False
print(a.isspace(),b.isspace(),c.isspace(),d.isspace(),e.isspace())

将字符串设置为标题格式

案例

python 复制代码
a = "hello world"
b = a.title()
#输出: Hello World
print(b)

检查字符串是否符合标题格式。

标题格式

  1. 字符串中的每个单词的首字母 必须是大写。
  2. 其余字母 必须是小写。
  3. 并且单词之间只能由空格分隔

案例

python 复制代码
a = "Hello World!"
b = "Hello \n World!"
c="USA"
d=""
#输出:True True False False
print(a.istitle(),b.istitle(),c.istitle(),d.istitle())

判断字符串中的字母是否都是大写,且至少包含一个大写字母。

注意

  1. 这里只判断字符串中的字母部分,非字母部分不做判断。
  2. 如果字符串中没有一个字母,则返回False。
  3. 空字符串返回False。

案例

python 复制代码
a = "Hello World!"
b = "HI"
c="C,B,A"
d="www.hao123.com"
e=""
f="123"
#输出:False True True False False False
print(a.isupper(),b.isupper(),c.isupper(),d.isupper(),e.isupper(),f.isupper())

将可迭代对象中的字符串连成一个字符串,连接符可以自定义。

注意:如果可迭代对象中的元素包含非字符串,则程序报错。

案例

python 复制代码
a = ["I", "LOVE", "Python"]
b="\t".join(a)
#输出:I	LOVE	Python <class 'str'>
print(b,type(b))

去掉字符串两边的空格(默认)和其他字符(如果指定了)

案例

python 复制代码
a=" hello world. "
#输出:hello world.
print(a.strip())

b=" hello world. "
#输出:ello world
print(b.strip(" h.l"))

去掉字符串左边的空格(默认)和其他字符(如果指定了)

案例

python 复制代码
a=" 1 2 3 "
b=" I LOVE YOU . "
#输出:LOVE YOU .
c=b.lstrip(" I")
print(c)
#输出:1 2 3
d=a.lstrip(" ")
print(d)
#输出:1 2 3
e=a.lstrip()
print(e)

去掉字符串右边的空格(默认)和其他字符(如果指定了)

案例

python 复制代码
a=" 1 2 3 "
b=" I LOVE YOU . "
#输出: I LOVE YOU
c=b.rstrip(". ")
print(c)
#输出: 1 2 3
d=a.rstrip(" ")
print(d)
#输出: 1 2 3
e=a.rstrip()
print(e)

翻译表

案例

python 复制代码
#创建翻译表,将数字转换为对应的中文数字
translationTable = str.maketrans("0123456789", "零一二三四五六七八九")

#使用翻译表进行转换
a = "996"
b = a.translate(translationTable)
#输出:九九六
print(b)

#创建翻译表,将小写字母转换为大写字母
translationTable = str.maketrans("abcdefghijklmnopqrstuvwxyz", "ABCDEFGHIJKLMNOPQRSTUVWXYZ")

#使用翻译表进行转换
word = "i love you."
capitalizedWord = word.translate(translationTable)
#输出:I LOVE YOU.
print(capitalizedWord)

在字符串中找到第一个指定的分隔符,并返回元组。

返回的元组一共有三个元素,三个元素含义如案例所示。

案例一(从左边开始寻找)

python 复制代码
a="www.hao123.com"
result=a.partition(".")

"""
第一个.是在www之后,所以元组的第一个元素是www,第二个元素是.第三个元素是hao123.com
可以看到,result的类型是元组类型。
"""
#输出:('www', '.', 'hao123.com') <class 'tuple'>
print(result,type(result))


result=a.partition("!")
#输出:('www.hao123.com', '', '') <class 'tuple'>
print(result,type(result))

案例二(从右边开始寻找)

python 复制代码
a="www.hao123.com"
result=a.rpartition(".")
#输出:('www.hao123', '.', 'com') <class 'tuple'>
print(result,type(result))

result=a.rpartition("!")
#输出:('', '', 'www.hao123.com') <class 'tuple'>
print(result,type(result))

剔除字符串开头部分指定的字符串参数

案例

python 复制代码
a="##123"
b=a.removeprefix("##")
c=a.removeprefix("###")

#输出:##123 1812850244176
print(a,id(a))
#输出:123 1812850335424
#分析:可以看出b是个新字符串。
print(b,id(b))
#输出:##123 1812850244176
#分析:返回原字符串,c不是一个新字符串。
print(c,id(c))

剔除字符串结束部分指定的字符串参数

案例

python 复制代码
a="123##"
b=a.removesuffix("##")
c=a.removesuffix("###")

#输出:123## 2665880255056
print(a,id(a))
#输出:123 2665880346304
#分析:可以看出b是个新字符串。
print(b,id(b))
#输出:123## 2665880255056
#分析:返回原字符串,c不是一个新字符串。
print(c,id(c))

替换字符串中的子字符串,可配置替换次数(默认替换所有)。

案例

python 复制代码
a="I LOVE JAVA."
b="I have two apples and two oranges."
#输出:I LOVE Python.
c= a.replace("JAVA", "Python")
print(c)
#输出:I have three apples and two oranges.
#分析:第三个参数位1,表示只替换第一次出现的two位three。
d= b.replace("two", "three",1)
print(d)

拆分字符串,返回列表。

rsplit(sep,maxsplit)右边 开始拆分字符串,split(sep,maxsplit)左边 开始拆分字符串。两个方法都返回包含拆分后的子字符串的列表。它们有两个参数:

  1. sep表示分隔符号,默认空格。
  2. maxsplit表示最大分隔次数,默认-1表示最大分隔。

案例(这里以rsplit(sep,maxsplit)为例,split(sep,maxsplit)和其不同点在于拆分顺序不同。)

python 复制代码
#默认用空格分隔,默认分隔次数最大。
#输出:['Dog', 'Cat', 'Elephant', 'Lion', 'Tiger', 'Giraffe', 'Monkey', 'Kangaroo', 'Penguin', 'Dolphin']
animal = "Dog Cat Elephant Lion Tiger Giraffe Monkey Kangaroo Penguin Dolphin"
animalList = animal.rsplit()
print(animalList)

#输出:['Apple', 'Banana', 'Orange', 'Strawberry', 'Mango', 'Pineapple', 'Watermelon', 'Grapes', 'Blueberry', 'Peach']
fruit = "Apple,Banana,Orange,Strawberry,Mango,Pineapple,Watermelon,Grapes,Blueberry,Peach"
fruitList = fruit.rsplit(',')
print( fruitList)

#指定最大拆分次数
#输出:['Carrot Broccoli Spinach,Tomato Potato Cucumber', 'Onion', 'Cauliflower', 'Peas']
vegetable = "Carrot Broccoli Spinach,Tomato Potato Cucumber Onion Cauliflower Peas"
vegetableList = vegetable.rsplit(maxsplit=3)
print( vegetableList)

#输出:['Emma,Liam,Olivia,Noah,Sophia,Jackson,Ava', 'Lucas', 'Isabella', 'Oliver']
name = "Emma,Liam,Olivia,Noah,Sophia,Jackson,Ava,Lucas,Isabella,Oliver"
nameList = name.rsplit(',',maxsplit=3)
print( nameList)

将字符串按行分隔,返回包含行的列表。

splitlines(keepends)方法中keepends默认为False,表示返回的列表中不包含分隔符号,设置为True表示包含分隔符。中以下是官方文档规定的符号,注意:在版本3.2中进行了更改,加入了\v和\f

|--------------------|-----------------------------|-------------|
| Representation | Description | 翻译 |
| \n | Line Feed | 换行符 |
| \r | Carriage Return | 回车 |
| \r\n | Carriage Return + Line Feed | 回车+换行 |
| \v or \x0b | Line Tabulation | 行表格 |
| \f or \x0c | Form Feed | 换页 |
| \x1c | File Separator | 文件分隔符 |
| \x1d | Group Separator | 组分隔符 |
| \x1e | Record Separator | 记录分隔符 |
| \x85 | Next Line (C1 Control Code) | 下一行(C1控制代码) |
| \u2028 | Line Separator | 行分隔符 |
| \u2029 | Paragraph Separator | 段落分隔符 |

案例

python 复制代码
#输出:['Dog', 'Cat', 'Elephant', 'Lion']
animal = "Dog\nCat\nElephant\nLion"
animalList = animal.splitlines()
print(animalList)

#输出:['Apple\n', 'Banana\r\n', 'Orange\u2028', 'Strawberry']
fruit = "Apple\nBanana\r\nOrange\u2028Strawberry"
fruitList = fruit.splitlines(True)
print( fruitList)
相关推荐
Python大数据分析@23 分钟前
python操作CSV和excel,如何来做?
开发语言·python·excel
黑叶白树24 分钟前
简单的签到程序 python笔记
笔记·python
Shy96041838 分钟前
Bert完形填空
python·深度学习·bert
上海_彭彭1 小时前
【提效工具开发】Python功能模块执行和 SQL 执行 需求整理
开发语言·python·sql·测试工具·element
zhongcx011 小时前
使用Python查找大文件的实用脚本
python
yyfhq2 小时前
sdnet
python
测试19982 小时前
2024软件测试面试热点问题
自动化测试·软件测试·python·测试工具·面试·职场和发展·压力测试
love_and_hope2 小时前
Pytorch学习--神经网络--搭建小实战(手撕CIFAR 10 model structure)和 Sequential 的使用
人工智能·pytorch·python·深度学习·学习
海阔天空_20133 小时前
Python pyautogui库:自动化操作的强大工具
运维·开发语言·python·青少年编程·自动化
零意@3 小时前
ubuntu切换不同版本的python
windows·python·ubuntu