介绍
在这个 Lab 中,你将探索操作 Python 字符串的基本技术。字符串是最常见的数据类型之一,知道如何有效地处理它们是任何 Python 程序员的一项关键技能。我们将涵盖从基本定义、使用特殊字符和创建多行字符串,到更高级的操作,如访问子字符串、检查内容、更改大小写、搜索、分割和格式化文本。完成这个 Lab 后,你将对在 Python 程序中处理文本数据有一个坚实的基础。
转义字符和多行字符串
在这一步,你将学习如何处理字符串中的特殊字符,创建忽略这些特殊字符的字符串,以及定义跨越多行的字符串。
首先,我们来探索转义字符(escape characters)。转义字符是一个反斜杠 \ 后面跟着你想要插入的字符。例如,\n 表示一个换行符,而 \' 表示一个单引号。
注意:如果你不熟悉使用 WebIDE(类似 VS Code),请先在 这个 Lab 学习。
从左侧的文件浏览器中打开 main.py 文件。在其中添加以下代码:
## 转义字符:使用反斜杠插入特殊字符
## \n = 换行符,\' = 单引号
print("Hello there!\nHow are you?\nI\'m doing fine.")
现在,通过打开终端并执行以下命令来运行脚本。你可以点击终端面板中的 + 图标来打开一个新的终端。
python3 main.py
你将看到输出中正确地插入了换行符和单引号。
Hello there!
How are you?
I'm doing fine.
接下来,我们来看原始字符串(raw strings)。原始字符串以 r 为前缀,它会忽略所有转义字符,并按原样打印字符串中出现的任何反斜杠。这在处理正则表达式或文件路径时特别有用。
将 main.py 的内容替换为以下代码:
## 原始字符串 (r 前缀):将反斜杠视为字面字符
print(r"Hello there!\nHow are you?\nI\'m doing fine.")
再次运行脚本:
python3 main.py
注意在输出中 \n 和 \' 现在是如何被当作字面字符处理的。
Hello there!\nHow are you?\nI\'m doing fine.
最后,你可以使用三个引号(""" 或 ''')创建多行字符串(multiline strings)。这是一种方便的方式来定义跨越多行的字符串,并保留其格式。
将 main.py 的内容替换为以下示例:
print(
"""Dear Alice,
Eve's cat has been arrested for catnapping,
cat burglary, and extortion.
Sincerely,
Bob"""
)
执行脚本:
python3 main.py
输出将是一个格式化的多行消息。
Dear Alice,
Eve's cat has been arrested for catnapping,
cat burglary, and extortion.
Sincerely,
Bob
字符串索引和切片
在这一步,你将学习如何使用索引(indexing)和切片(slicing)来访问单个字符和提取子字符串。
Python 中的字符串是序列(sequences),这意味着你可以使用索引来访问它们的组成部分。索引从 0 开始,代表第一个字符。
H e l l o w o r l d !
0 1 2 3 4 5 6 7 8 9 10 11
清空 main.py 文件,并添加以下代码来定义一个字符串:
spam = 'Hello world!'
要访问第一个字符('H'),你使用索引 0。要访问第五个字符('o'),你使用索引 4。你也可以使用负数索引从字符串末尾开始计数;-1 指向最后一个字符。
将这些 print 语句添加到 main.py 中以查看索引的实际应用:
spam = 'Hello world!'
## 字符串索引:通过位置(从 0 开始)访问字符
print(spam[0]) ## 返回第一个字符
print(spam[4]) ## 返回第五个字符
print(spam[-1]) ## 返回最后一个字符
运行脚本:
python3 main.py
输出将显示你访问的单个字符。
H
o
!
切片(Slicing)允许你提取字符串的一部分,称为子字符串。语法是 [start:end],它提取从 start 索引开始到 end 索引(不包括 end 索引)的字符。
让我们练习一下切片。将 main.py 的内容替换为以下代码。我们将探索几种不同的切片字符串的方法。
spam = 'Hello world!'
## 字符串切片:使用 [start:end] 语法提取子字符串
print(spam[0:5]) ## 返回索引 0 到 4 的字符
print(spam[:5]) ## 省略 start 索引默认为 0
print(spam[6:]) ## 省略 end 索引默认为字符串末尾
print(spam[::-1]) ## 步长为 -1 会反转字符串
执行脚本:
python3 main.py
观察通过切片创建的不同子字符串。
Hello
Hello
world!
!dlrow olleH
字符串成员资格和大小写方法
在这一步,你将学习如何检查子字符串是否存在于另一个字符串中,以及如何更改和验证字符串的大小写。
in 和 not in 运算符用于检查字符串的成员资格(membership)。它们返回一个布尔值:True 或 False。
清空 main.py 文件,并添加以下代码来测试这些运算符。请注意,比较是区分大小写的。
## 'in' 和 'not in' 运算符
print('Hello' in 'Hello World')
print('HELLO' in 'Hello World')
print('cats' not in 'cats and dogs')
运行脚本以查看布尔结果:
python3 main.py
True
False
False
Python 还提供了几种方法来更改字符串的大小写。upper()、lower() 和 title() 方法分别返回一个全部大写、全部小写或标题大小写(每个单词首字母大写)的新字符串。
将 main.py 的内容替换为以下内容:
greet = 'Hello world!'
print(greet.upper())
print(greet.lower())
print(greet.title())
执行脚本:
python3 main.py
你将看到转换后的字符串。
HELLO WORLD!
hello world!
Hello World!
要检查字符串是否已经是特定的格式,你可以使用 isupper() 和 islower() 方法。如果字符串中所有有大小写的字符都是指定的大小写,并且至少存在一个有大小写的字符,这些方法就返回 True。
将 main.py 的内容替换为以下示例:
spam = 'Hello world!'
print(spam.islower())
print('HELLO'.isupper())
## 如果字符串中没有字母字符,则返回 True (因为没有不符合条件的字符)
print('abc12345'.islower())
## 如果字符串中没有可区分大小写的字符,则返回 False
print('12345'.islower())
运行脚本以验证每个字符串的大小写情况。
python3 main.py
False
True
True
False
字符串查找和分割
在这一步,你将学习如何检查字符串是否以特定子字符串开头或结尾,如何将字符串列表连接成单个字符串,以及如何将字符串分割成子字符串列表。
startswith() 和 endswith() 方法可用于检查字符串的开头或结尾。它们返回 True 或 False。
清空 main.py 并添加以下代码:
print('Hello world!'.startswith('Hello'))
print('Hello world!'.endswith('world!'))
print('abc123'.startswith('abcdef'))
运行脚本以查看结果:
python3 main.py
True
True
False
join() 方法在分隔符字符串上调用,并接受一个可迭代对象(如列表)作为参数。它将可迭代对象的元素组合成一个单一的字符串,并在每个元素之间放置分隔符。
将 main.py 的内容替换为以下示例,以查看 join() 的工作方式:
## 使用逗号加空格作为分隔符进行连接
print(', '.join(['cats', 'rats', 'bats']))
## 使用空格作为分隔符进行连接
print(' '.join(['My', 'name', 'is', 'Simon']))
执行脚本:
python3 main.py
cats, rats, bats
My name is Simon
split() 方法与 join() 的作用相反。它在字符串上调用,并将其分解为子字符串列表。默认情况下,它按空白字符(whitespace)分割,但你可以提供一个特定的分隔符(delimiter)。
将 main.py 的内容替换为以下代码以练习分割字符串:
## 按默认空白字符分割
print('My name is Simon'.split())
## 按特定分隔符 'ABC' 分割
print('MyABCnameABCisABCSimon'.split('ABC'))
运行脚本以查看生成的列表:
python3 main.py
['My', 'name', 'is', 'Simon']
['My', 'name', 'is', 'Simon']
字符串对齐和清理
在这一步,你将学习如何格式化字符串的对齐方式,以及如何从字符串的开头或结尾删除不需要的字符,例如空白字符(whitespace)。
Python 提供了对文本在给定宽度内进行对齐的方法:rjust()(右对齐)、ljust()(左对齐)和 center()。这些方法返回一个填充了字符的新字符串。
清空 main.py 文件,并添加以下代码:
print('Hello'.rjust(10))
print('Hello'.ljust(10))
print('Hello'.center(20))
运行脚本以查看对齐后的文本。输出中的单引号有助于可视化填充(padding)。
python3 main.py
Hello
Hello
Hello
你还可以提供一个可选的第二个参数,以指定除空格以外的填充字符。将 main.py 的内容替换为以下内容:
print('Hello'.rjust(20, '*'))
print('Hello'.center(20, '='))
再次运行脚本:
python3 main.py
***************Hello
=======Hello========
要清理字符串,你可以使用 strip()、rstrip() 和 lstrip() 方法。这些方法用于从字符串的末端删除字符。默认情况下,它们删除空白字符(空格、制表符、换行符)。
将 main.py 的内容替换为以下示例:
spam = ' Hello World '
print(spam.strip()) ## 从两端删除
print(spam.lstrip()) ## 从左侧删除
print(spam.rstrip()) ## 从右侧删除
执行脚本以查看清理后的字符串:
python3 main.py
Hello World
Hello World
Hello World
你也可以将字符串参数传递给这些方法,以指定要删除哪些字符。该方法将删除参数中位于字符串末尾的所有字符。
最后一次替换 main.py 的内容:
spam = 'SpamSpamBaconSpamEggsSpamSpam'
## 从两端删除所有字符 'S', 'p', 'a', 'm'
print(spam.strip('ampS'))
运行脚本:
python3 main.py
输出显示外部的 "Spam" 部分已被移除,留下了字符串的中心部分。
BaconSpamEggs
总结
在这个实验(Lab)中,你掌握了 Python 中字符串操作的基础技术。你学习了如何使用转义字符(escape characters)和创建多行字符串(multiline strings)以获得更好的文本表示。你练习了使用索引(indexing)和切片(slicing)来访问字符串的部分内容。你还探索了强大的字符串方法,用于检查成员资格(in, not in)、更改大小写(upper(), lower())、验证大小写(isupper(), islower())、搜索(startswith(), endswith())、连接和分割(joining and splitting),最后是格式化和清理文本(rjust(), strip())。这些技能对于任何涉及 Python 文本处理的任务都是基础性的。



