startswith() 方法是什么?
startswith() 是 Python 字符串对象的一个内置方法,它的主要作用是检查一个字符串是否以指定的前缀开头,如果字符串以该前缀开头,该方法返回 True,否则返回 False。

可以把它想象成一个“开头检查器”。
基本语法
str.startswith(prefix[, start[, end]])
str: 你要进行检查的原始字符串。prefix: 你要检查的前缀,它可以是一个字符串,也可以是一个包含多个前缀字符串的元组。start(可选): 开始检查的起始位置,如果提供了这个参数,startswith()只会从字符串的这个索引位置开始检查。end(可选): 结束检查的结束位置(不包含该位置本身),如果提供了这个参数,startswith()只会检查到字符串的这个索引位置为止。
参数详解
prefix 参数
这是最核心的参数,它有两种主要形式:
-
单个前缀字符串:最常见的情况。
text = "Hello, World!" print(text.startswith("Hello")) # 输出: True print(text.startswith("World")) # 输出: False -
前缀元组:如果你想检查字符串是否以 多个 可能的前缀中的任意一个开头,可以将这些前缀放在一个元组中传入,只要匹配到元组中的任意一个前缀,就返回
True。
(图片来源网络,侵删)text = "Hello, World!" # 检查是否以 "Hello", "Hi", 或 "Hey" 开头 print(text.startswith(("Hello", "Hi", "Hey"))) # 输出: True text = "Good morning" print(text.startswith(("Hello", "Hi", "Hey"))) # 输出: False
start 和 end 参数(可选)
这两个参数用于限定检查的字符串范围,非常有用,可以避免创建子字符串,从而提高效率。
start: 指定从哪个索引开始检查。end: 指定检查到哪个索引为止(不包含该索引)。
示例:
sentence = "This is a sample sentence for testing."
# 检查从索引 5 开始的子字符串是否以 "is" 开头
# 子字符串是 "is a sample..."
print(sentence.startswith("is", 5)) # 输出: True
# 检查从索引 0 到 4 的子字符串是否以 "This" 开头
# 子字符串是 "This"
print(sentence.startswith("This", 0, 4)) # 输出: True
# 检查从索引 10 到 15 的子字符串是否以 "sample" 开头
# 子字符串是 "a sa"
print(sentence.startswith("sample", 10, 15)) # 输出: False
返回值
该方法始终返回一个布尔值:
True: 当字符串(或指定范围内的子字符串)以指定的前缀(或元组中的任意一个前缀)开头时。False: 在其他所有情况下。
使用场景和示例
示例 1:检查文件扩展名
这是 startswith() 和 endswith() 的经典应用场景,假设你想检查一个文件名是否属于特定类型。

filename = "report_2025.pdf"
if filename.endswith(".pdf"):
print("这是一个 PDF 文件。")
else:
print("这不是一个 PDF 文件。")
# 注意:startswith() 也可以用于检查特定前缀的文件名
if filename.startswith("report_"):
print("这是一个报告文件。")
示例 2:处理 URL 路径
在 Web 开发中,经常需要根据 URL 的路径来执行不同的逻辑。
url_path = "/api/v1/users/profile"
if url_path.startswith("/api/v1/"):
print("这是一个 API v1 的请求。")
elif url_path.startswith("/api/v2/"):
print("这是一个 API v2 的请求。")
else:
print("这是一个其他类型的请求。")
示例 3:使用元组进行多种前缀匹配
假设你有一串日志,想判断它是否是不同级别的日志(如 INFO, DEBUG, WARNING)。
log_line = "[INFO] User logged in successfully."
log_line_error = "[ERROR] Database connection failed."
# 定义可能的前缀
valid_log_prefixes = ("[INFO]", "[DEBUG]", "[WARNING]")
if log_line.startswith(valid_log_prefixes):
print("这是一条有效的日志信息。")
else:
print("这不是一条有效的日志信息。")
# 对错误日志进行测试
if log_line_error.startswith(valid_log_prefixes):
print("这是一条有效的日志信息。") # 这行不会执行
else:
print("这不是一条有效的日志信息。") # 输出这句
startswith() vs. endswith()
这两个方法非常相似,只是检查的方向不同。
| 特性 | str.startswith(prefix) |
str.endswith(suffix) |
|---|---|---|
| 功能 | 检查字符串是否以 prefix 开头 |
检查字符串是否以 suffix
|
| 参数 | prefix, start, end |
suffix, start, end |
prefix/suffix |
可以是字符串或元组 | 可以是字符串或元组 |
| 典型用途 | 检查文件名前缀、URL路径前缀、协议等 | 检查文件扩展名、MIME类型、特定后缀等 |
重要注意事项
-
区分大小写:
startswith()是区分大小写的。print("Hello".startswith("hello")) # 输出: False如果需要不区分大小写的检查,可以先统一转换大小写:
text = "Hello World" prefix = "hello" if text.lower().startswith(prefix.lower()): print("匹配成功(不区分大小写)。") # 输出这句 -
空字符串 ():任何字符串都以空字符串开头。
print("anything".startswith("")) # 输出: True -
前缀为空元组 :如果传入一个空元组作为
prefix,结果永远是False,因为没有前缀可以匹配。print("anything".startswith(())) # 输出: False
startswith() 是一个简单、高效且用途广泛的字符串方法,当你需要判断一个字符串的起始部分是否符合某种模式时,它就是最佳选择,结合 start 和 end 参数,它还能实现更精细的子字符串匹配,是 Python 字符串处理工具箱中不可或缺的一员。
