自学内容网 自学内容网

05. 字符串

一、什么是字符串

  字符串用来表示一段文本信息。在 Python 中,字符串需要使用引号引起来,引号可以是单引号,也可以是双引号,但是不要混的用。相同的引号间不能嵌套使用。

s = 'hello'
print(s)
print(type(s))

s = "hello"
print(s)
print(type(s))

  如果双引号和单引号混合使用,会报以下错误:

SyntaxError: EOL while scanning string literal

  相同的引号之间不能嵌套使用,不同的引号之间可以嵌套使用;

s = "子曰:'学而时习之,不亦说乎'"

  单引号和双引号不能跨行使用,如果要换行使用,使用 \ 连接。

s = "锄禾日当午,\
汗滴禾下土。\
谁知盘中餐,\
粒粒皆辛苦。"

print(s)

  但是上述程序运行之后,输出结果还是在一行。如果想要换行,并且保留原有的字符串格式,我们可以使用长字符串。长字符串使用三重引号来表示。

s = '''锄禾日当午,
汗滴禾下土。
谁知盘中餐,
粒粒皆辛苦。'''

print(s)

二、转义字符

  可以使用 \ 作为转义字符。通过转义字符,可以在字符串中使用一些特性的内容

转义字符说明
\n换行符,将光标位置移到下一行开头
\r回车符,将光标位置移到本行开头
\t水平制表符,也即 Tab 键,一般相当于四个空
\a蜂鸣器响铃
\b退格(Backspace),将光标位置移到前一列
\\反斜线
\’单引号
\"双引号
\在字符串行尾的续行符,即一行未完,转到下一行继续写
\uxxxx表示 Unicode 编码
s = "子曰:\"学而时习之,不亦说乎\""
print(s)

s = "锄禾日当午,\n\
汗滴禾下土。\n\
谁之盘中餐,\n\
粒粒皆辛苦。"

print(s)

s = '\u2200'
print(s)

三、格式化字符串

【1】、使用 % 占位符格式化字符串

  在创建字符串时,可以在字符串中指定占位符;%s 在字符串中表示任意字符串,%f 表示浮点数的占位符,%d 表示整数的占位符。

# %s表示字符串占位符
name = "Sakura"
print("name: %s" %name)

age = 10
# 值按照位置与占位符一一对应
print("name: %s, age: %d" %(name,age))

# 以字典的形式传值,打破位置的直线
info = "name: %(name)s, age: %(age)d" %{'name':'Sakura','age':10}
print(info)

# %m.ns字符串的长度限制在m-n之间
a = "hello %3.5s' %'abcdefg"
print(a)

# %f表示浮点数占位符
# %.nf表示保留n位小数,其余位四舍五入
a = 'result = %.2f' %123.456
print(a)

# %d表示整数占位符,如果是浮点是,直接舍弃小数部分
a = "result = %d" %123.95
print(a)

【2】、使用 format() 方法格式化字符串

  我们还可以使用 format() 来进行格式化字符串,该方法是在 Python 2.6 之后的版本引入的。

# 按照位置依次取值
info = "name: {}, age: {}".format("Sakura",10)
print(info)

# 按照位置取值,支持索引
info = "name: {0}, age: {1}".format("Sakura",10)
print(info)

# 打破位置的限制,按照key=value的方式传值
info = "name: {name}, age: {age}".format(name="Sakura",age=10)
print(info)

  无论是 % 还是 format(),含有占位符的字符串也是可以被复用的;

info = "name: %s, age: %d"
info1 = info %("Sakura",10)
info2 = info %("Mikoto",14)
print(info1)
print(info2)

info = "name: {}, age: {}"
info1 = info.format("Sakura",10)
info2 = info.format("Mikoto",14)
print(info1)
print(info2)

【3】、f 字符串

  在 Python 3.6 之后的版本中,我们可以通过字符串前添加一个 f 来创建一个格式化字符串。在格式化字符串中可以直接嵌入变量。

name = "Sakura"
age = 10
info = f"name: {name}, age: {age}"
print(info)

四、原生字符串

  在 Python 中有些字符会有特殊的含义,会进行转义,但是有时候我们不想转义它们,只是想把它们作为普通的字符串打印出来,这是我们可以使用原生字符串,只需在字符串前面加一个 r 即可。

path = r"C:\Program File\navicat\navicat.exe"
print(path)

五、字符串的常见操作

【1】、字符串相加

  在 Python 中,字符串支持进行相加操作,即将两个字符串进行拼接,使用加(+)运算符实现。语法格式如下:

first_name = "Sakura"
last_name = "Kinomoto"
name = first_name + " " + last_name
print(name)

【2】、字符串乘法

  在 Python 中,使用数字 n 乘以一个字符串会生成一个新的字符串。新字符串的内容为原来字符串被重复 n 次的结果。

names1 = "Sakura "
names2 = names1 * 3
print(names2)

【3】、获取字符串的长度

len(s)                                          # 获取字符串长度
name = "Sakura"
print(len(name))

【4】、大小写转换

str.upper()                                     # 将字符串转换为大写
str.lower()                                     # 将字符串转换为小写
str.capitalize()                                # 将字符串的首字母大写
str.swapcase()                                  # 将字符串的大小写反转
str.title()                                     # 将字符串中的每个大慈的首字母大写
name = "My name is Sakura Kinomoto"

print("原本的值:",name,end="\n\n")

# 将字符串转为大写,作为结果返回,原字符串不变
result = name.upper()
print("转换为大写后的结果:",result,end="\n\n")

# 将字符串转为小写,作为结果返回,原字符串不变
result = name.lower()
print("转换小写后的结果:",result,end="\n\n")

# 将字符串的首字母大写,作为结果返回,原字符串不变
result = name.capitalize()
print(f"首字母大写后的结果:",result,end="\n\n")

# 将字符串的大小写反转,作为结果返回,原字符串不变
result = name.swapcase()
print("大小写反转的结果:",result,end="\n\n")

# 将字符串的每个单词的首字母大写,作为结果返回,原字符串不变
result = name.title()
print("大小写反转的结果:",result,end="\n\n")

【5】、判断字符串的组成

str.isupper()                                   # 判断字符串是否全为大写
str.islower()                                   # 判断字符串是否全为小写
str.istitle()                                   # 判断字符串中每个单词是否首字母大写
str.isalnum()                                   # 判断字符串是否由字母或数字组成
str.isdecimal()                                 # 判断字符串是否由数字组成
str.isalpha()                                   # 判断字符串是否由字母组成
str.isspace()                                   # 判断字符串是否由空格组成
name = "Sakura Kinomoto"

print("字符串是否全为大写",name.isupper())
print("字符串是否全为大写",name.islower())
print("字符串中每个单词的首字母是否大写",name.title())
print("字符串是否由字母和数字组成",name.isalnum())
print("字符串是否由数字组成",name.isdecimal())
print("字符串是否由字母和数字组成",name.isalpha())
print("字符串是否由空格组成",name.isspace())

【6】、判断字符串是否为数字

str.isdecimal()                                 # 判断字符串是否由数字组成
str.isdigit()                                   # 判断字符串是否为阿拉伯形式的数字
str.isnumeric()                                 # 判断字符串是否为数字
num1 = b"3"                         # 阿拉伯格式的数字
num2 = "3"                          # 阿拉伯格式的数字
num3 = "三"                         # 中文简体数字
num4 = "叁"                         # 中文繁体数字
num5 = "Ⅲ"                         # 罗马格式的数字
num6 = "③"                          # 阿拉伯格式的数字

print("isdecimal()方法判断")
#print(num1,":",num1.isdecimal())  # 无此方法
print(num2,":",num2.isdecimal())
print(num3,":",num3.isdecimal())
print(num4,":",num4.isdecimal())
print(num5,":",num5.isdecimal())
print(num6,":",num6.isdecimal())

print("\nisdigit()方法判断")
print(num1,":",num1.isdigit())
print(num2,":",num2.isdigit())
print(num3,":",num3.isdigit())
print(num4,":",num4.isdigit())
print(num5,":",num5.isdigit())
print(num6,":",num6.isdigit())

print("\nisnumber()方法判断")
#print(num1,":",num1.isnumeric())  # 无此方法
print(num2,":",num2.isnumeric())
print(num3,":",num3.isnumeric())
print(num4,":",num4.isnumeric())
print(num5,":",num5.isnumeric())
print(num6,":",num6.isnumeric())

【7】、判断字符串以什么开头以什么结尾

str.startswith(prefix[, start[, end]])          # 判断字符串是否以什么开头
str.endswith(suffix[, start[, end]])            # 判断字符串是否以什么结尾
text = "中国电信"

# 判断字符串是否以什么开头
if text.startswith("中国"):
    print("以中国开头")
else:
    print("不是以中国开头")

# 判断字符串是否以什么结尾
if text.endswith("电信"):
    print("以电信结尾")
else:
    print("不是以电信结尾")

【8】、删除字符串的前缀或后缀

str.removeprefix(prefix, /)                     # 删除字符串的前缀
str.removesuffix(suffix, /)                     # 删除字符串的后缀
url = "https://baidu.com"
result = url.removeprefix("https://")
print(result)
result = result.removesuffix(".com")
print(result)

【9】、字符串的替换

str.replace(old, new[, count])                  # 替换指定的字符串
text = "中国电信,电信流量卡"
# 字符串的替换
result = text.replace("电信","移动")
print(text)
print(result)

【10】、字符串的切割

str.split(sep=None, maxsplit=- 1)               # 以sep字符切割maxsplit次字符串
str.rsplit(sep=None, maxsplit=- 1)              # 以sep字符切割maxsplit次字符串,从右边开始切割
str.partition(sep)                              # 以sep字符切割一次字符串
str.splitlines(keepends=False)                  # 以换行为切割符,切割字符串
text = "Sakura,10,sakura@petal.com"

# 字符串的切割
data_list = text.split(',')
print(data_list)

# 我们还可以指定最多切割几次
data_list = text.split(',',maxsplit=1)
print(data_list)

# 从右边开始切割
data_list = text.rsplit(',',1)
print(data_list)

# 以指定的字符从分割
data_list = text.partition(",")
print(data_list)
text = """
Hello world!
My name is Sakura!
"""

data_list = text.splitlines()
print(data_list)

【11】、字符串的拼接

str.join(iterable)                              # 字符串的拼接
# 这是一个列表
name_list = ["Sakura","Mikoto","Shana"]
# 字符串的拼接
str = '/'.join(name_list)
print(str)

【12】、去除字符串的两端的空白

str.strip([chars])                              # 去除两端空白
str.lstrip([chars])                             # 去除左端空白
str.rstrip([chars])                             # 去除右端空白
text = "  中国电信  中国移动   中国联通"
print(text)

# 去掉字符串两端的空白
result = text.strip()
print(result)

# 去掉字符串左边的空白
result = text.lstrip()
print(result)

# 去掉字符串右边的空白
result = text.rstrip()
print(result)

【13】、判断字符串是否包含指定字符串

object.__contains__(self, item)                 # 判断字符串是否包含指定字符串
text = "中国移动通信"

result = text.__contains__("移动")
print(result)

result  = "移动" in text
print(result)

【14】、统计字符串中某个字符串出现的次数

str.count(sub[, start[, end]])                  # 统计字符串中某个字符串出现的次数
name = "Sakura"
# 统计a出现的次数
print(name.count('a'))

【15】、查找指定字符串

str.find(sub[, start[, end]])                   # 查找指定字符串
str.index(sub[, start[, end]])                  # 查找指定字符串第一次出现的索引
name = "Sakura"
print(name.find('a'))
print(name.index('a'))

find() 方法如果没找到则返回 -1;

index() 方法如果找不到,程序会抛出异常:ValueError: substring not found;

【16】、字符串的填充

str.center(width[, fillchar])                   # 字符串的填充,只能填充一种字符
str.ljust(width[, fillchar])                    # 字符串填充,内容在左边
str.rjust(width[, fillchar])                    # 字符串填充,内容在右边
str.zfill(width)                                # 字符串填充,左边补0
name = "Shana"
# 字符串的填充,只能填充一种字符
print(name.center(20,'*'))
print(name.ljust(20,'*'))
print(name.rjust(20,'*'))

# 字符串填充,左边补0
data = "1001"
print(data.zfill(8))

【17】、字符串转换成字节类型

str.encode(encoding='utf-8', errors='strict')   # 字符串转换成字节类型
bytes.decode(encoding='utf-8', errors='strict') # 将字节类型转换为字符串
data = "中国移动"
v1 = data.encode("utf-8")
print(v1)

data = v1.decode("utf-8")
print(data)

原文地址:https://blog.csdn.net/flurry_heart/article/details/144040763

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!