3. 字符串

字符串就是“一串字符”,如“Hello World”就是一个字符串。在 Python 中,字符串必须使用引号括起来,既可以是单引号 '',也可以是双引号 ""

3.1. 字符串

字符串是通过单引号 '' 或者双引号 "" 包裹起来的一段文字。如 "Hello World" 就是一个字符串。

3.1.1. 字符串的定义

如上所述,通过单引号 '' 或者双引号 "" 将一段文字包裹起来便是一个字符串,字符串的定义如下代码所示:

str1 = "Hello World"
str2 = 'Hello World'
print(str1) # Hello World
print(str2) # Hello World

单引号 '' 或者双引号 "" 定义的字符串没有区别

3.1.2. 三引号

如果一个字符串的长度比较长,是一段文本,如字符串:

欢迎使用 Python 编程语言。
这是一个测试长文本的例子。
我们会看到这段文本的长度比较长。

一种解决方法还是使用单引号 '' 或者双引号 "" ,同时配合反斜线 \ 对换行符进行转义,具体代码如下所示:

a = "欢迎使用 Python 编程语言。\
这是一个测试长文本的例子。\
我们会看到这段文本的长度比较长。"
print(a)

除此之外,还可以使用三引号 ''' 来定义长字符串,具体代码如下所示:

b = '''欢迎使用 Python 编程语言。
这是一个测试长文本的例子。
我们会看到这段文本的长度比较长。
'''
print(b)

如果用三引号定义的字符串没有赋值给任何变量,那么这个字符串就是注释,会被 Python 解释器忽略。

3.1.3. 字符串的子串

Python 访问子字符串,可以使用方括号 [] 来截取部分字符串,字符串的截取的语法格式如下:

变量[头下标:尾下标]

使用方法如下代码所示:

str = 'Hello World!'
print(str[0]) # H
print(str[1:7]) # ello W

3.1.4. 转义字符

如果字符串中就包含了单引号或者双引号,这样就会和字符串的定义冲突,如字符串“I’m a coder”,其中就包含了单引号,此时需要定义这样的字符串有如下的两种方法:

  • 使用与字符串中不同的引号来定义字符串
  • 使用反斜线 \ 对特殊字符转义

具体使用方法如下代码所示:

# 使用不同的符号
a = "I'm a coder"
print(a)
# 使用转义符号
b = 'I\'m a coder'
print(b)

当字符串中即包含单引号,又包含双引号,此时就只能使用转义符号。

除了对引号转义,常见的转义字符如下图所示:

输入图片说明

3.2. 字符串中的常用方法

针对字符串, Python 语言中提供了大量的函数用于处理不同的字符串处理问题。

3.2.1. 获取用户输入

input() 函数用于获取用户输入,函数的参数为向用户生成的一条提示,然后获取用户输入的内容。具体的使用方法如下代码所示:

str1 = input("请输入:") # 请输入:hello world
print(str1) # hello world
print(type(str1)) # <class 'str'>

当代码执行时,出现提示:“请输入:”,此时,输入“hello world”,输入的内容就回呗赋值给变量 str1 ,通过 type() 函数,我们发现变量 str1 是一个字符串类型。

3.2.2. 字符串拼接

在 Python 中,可以使用 + 运算符将几个字符串拼接在一起,具体使用方法如下代码所示:

str1 = "hello"
str2 = "world"
str3 = str1 + " " + str2
print(str3) # hello world

如果想要将字符串与数值类型的变量拼接在一起,那么必须先使用 str()repr() 函数将数值转换成字符串,具体使用方法如下代码所示:

str1 = "hello world"
a = 1
# 使用 str()
str2 = str1 + " " + str(a)
print(str2) # hello world 1
# 使用 repr()
str3 = str1 + " " + repr(a)
print(str3) # hello world 1

3.2.3. 分割、连接方法

Python 中可以通过 split() 函数将字符串按指定分隔符分割成多个短语的列表,反之,通过 join() 函数将列表中的多个字符串按照指定的分隔符拼接成一个新的字符串。具体使用方法如下代码所示:

str1 = "hello world my name is felixzhao"
# 按照空格分割字符串
list_a = str1.split(" ")
print(list_a) # ['hello', 'world', 'my', 'name', 'is', 'felixzhao']
print(type(list_a)) # <class 'list'>
# 拼接字符串
str2 = " ".join(list_a)
print(str2) # hello world my name is felixzhao
print(type(str2)) # <class 'str'>

对于列表数据类型可以参见后续章节:4. 列表、元组和字典

3.2.4. 删除空白

如果字符串中存在空白, Python 中也提供了专门的函数用于删除空白。根据空白的位置不同,分为三种,其中 strip() 函数用于删除字符串前后的空白, lstrip() 函数用于删除字符串左边的空白, rstrip() 函数用于删除字符串右边的空白。

这三个方法只是返回字符串删除空白后的副本,并没有改变字符串本身。

具体的使用方法如下代码所示:

s = " This is a string "
# 删除字符串左边的空白
print(s.lstrip()) # "This is a string "
# 删除字符串右边的空白
print(s.rstrip()) # " This is a string"
# 删除字符串两边的空白
print(s.strip()) # "This is a string"
# 再次输出 s, 将会看到 s 并没有改变
print(s) # " This is a string "

3.2.5. 大小写处理

在 Python 中提供了针对字母的大小写处理函数,其中, title() 函数用于将字符串中每个单词的首字母大写,其他字母变成小写。 lower() 函数用于将整个字符串转变成小写。反之, upper() 函数用于将整个字符串转变成大写。具体的使用方法如下代码所示:

str1 = "hello WORLD my name is FelixZhao"
# 每个单词首字母大写
str_title = str1.title()
print(str_title) # Hello World My Name Is Felixzhao
# 全部转小写
str_lower = str_title.lower()
print(str_lower) # hello world my name is felixzhao
# 全部转大写
str_upper = str1.upper()
print(str_upper) # HELLO WORLD MY NAME IS FELIXZHAO

3.2.6. 查找、替换相关方法

在字符串中,查找、替换等操作是最常用的字符串处理方法, Python 中也提供了丰富的用于字符串查找、替换的相关函数,其中, startswith() 函数用于判断字符串是否以指定子串开头,与之对应, endswith() 函数用于判断字符串是否以指定子串结尾。 find() 函数用于查找指定子串在字符串中出现的位置,如果没有找到指定子串,则返回 -1 。 index() 函数用于查找指定子串在字符串中出现的位置,如果没有找到指定子串,则引发 ValueError 错误。 replace() 函数用于使用指定子串替换字符串中的目标子串。具体的使用方法如下代码所示:

str1 = "hello world my name is FelixZhao"
# 判断开始
print(str1.startswith("hello")) # True
print(str1.startswith("Hello")) # False
# 判断结尾
print(str1.endswith("FelixZhao")) # True
# 查找
print(str1.find("world")) # 6
print(str1.find("new")) # -1
if (str1.find("world") != -1):
	print(str1.index("world")) # 6
# 替换
print(str1.replace("FelixZhao", "felix")) # hello world my name is felix

3.2.7 格式化输出

上述大量使用到 print() 函数对字符串输出,实际上, Python 还提供了 % 对各种类型的数据进行格式化输出,如下代码所示:

name = "FelixZhao"
age = 34
# My name is FelixZhao and my age is 34
print("My name is %s and my age is %s" % (name, age))

print() 函数中包含了两个 %s ,这也被称为转换说明符,其作用相当于一个占位符,它会被后面的变量或表达式的值代替。如上,第一个 %s 会被变量 name 的值替换,第二个 %s 会被变量 age 的值替换。除了上述的 %s 转换说明符, Python 中还支持如下图所示的转换说明符:

输入图片说明

3.3. bytes 类型

str 类型相对应的,在 Python 中还支持 bytes 类型,其中, str 类型由多个字符组成,操作的基本单位是字符, 而 bytes 类型是由多个字节组成,操作的基本单位是字节。除此之外,两者支持的方法基本相同。

除了上述的一些基本方法外,涉及到 str 类型和 bytes 类型的相互转换,首先是将一个 str 类型转换成 bytes 类型,有如下的三种方式:

  • 如果字符串内容都是 ASCII 字符,则可以通过直接在字符串之前添加 b 来构建 bytes 类型
  • 调用 bytes() 函数将字符串按指定字符集转换成 bytes 类型,如果不指定字符集,默认使用 UTF-8 字符集
  • 调用字符串本身的 encode() 方法将字符串按指定字符集转换成 bytes 类型,如果不指定字符集,默认使用 UTF-8 字符集

具体使用方法如下代码所示:

# 方法一,直接在字符串之前添加 b
b1 = b"Hello World"
print(b1) # b'Hello World'
print(type(b1)) # <class 'bytes'>
# 方法二,调用 bytes() 函数
b2 = bytes("Hello World", encoding='utf-8')
print(b2) # b'Hello World'
print(type(b2)) # <class 'bytes'>
# 方法三,利用 encode() 方法
b3 = "Hello World".encode('utf-8')
print(b3) # b'Hello World'
print(type(b3)) # <class 'bytes'>
b4 = "学习 Python".encode('utf-8')
print(b4) # b'\xe5\xad\xa6\xe4\xb9\xa0 Python'
print(type(b4)) # <class 'bytes'>

反之,将一个 bytes 类型转换成 str 类型,可以调用 bytes 对象的 decode() 方法,使用方法如下代码所示:

b = b'\xe5\xad\xa6\xe4\xb9\xa0 Python'
print(type(b))
str_b = b.decode('utf-8')
print(str_b) # 学习 Python
print(type(str_b)) # <class 'str'>

3.4. 本章小结

本章主要介绍了 Python 字符串的基本概念,包括字符串的定义,子串以及转义字符等。对于字符串的基本操作,本章中详细介绍了在 Python 字符串中常使用到的一些方法,如字符串拼接,分割、连接方法,删除空白,大小写处理,查找、替换相关方法以及格式化输出的相关语法。最后还介绍了 Python 中的 bytes 类型,详细介绍了 bytes 类型和 str 类型之间的相互转换。

本章需要掌握知识点:

  1. 掌握字符串的定义方法,子串的概念以及常用的转义字符
  2. 掌握字符串的基本操作方法
  3. 掌握 bytes 类型和 str 类型之间的相互转换