pin_drop当前位置:知识文库 ❯ 图文

Python字符串startswith和endswith方法

概述

str.startswith()str.endswith()方法用于判断字符串是否以指定的前缀或后缀开头/结尾,返回布尔值。这两个方法在文件类型判断、URL协议检查、数据筛选等场景中非常实用,尤其是支持元组参数可以一次匹配多种模式。本篇教程将详细介绍它们的语法和实际应用。


语法

startswith

str.startswith(prefix[, start[, end]])判断字符串是否以指定前缀开头。

endswith

str.endswith(suffix[, start[, end]])判断字符串是否以指定后缀结尾。

参数说明

参数 含义 是否必需
prefix/suffix 前缀/后缀,可以是字符串或元组
start 检查的起始位置 否,默认0
end 检查的结束位置 否,默认字符串长度

基本用法

代码示例

s = "Hello, Python!"

print(s.startswith("Hello"))
print(s.startswith("Python"))
print(s.endswith("!"))
print(s.endswith("Python"))

元组参数

startswith()endswith()的参数可以是元组,只要匹配元组中的任意一个元素就返回True

代码示例

filename = "report.pdf"
print(filename.endswith((".pdf", ".doc", ".txt")))

url = "https://www.example.com"
print(url.startswith(("http://", "https://", "ftp://")))

image = "photo.png"
print(image.endswith((".jpg", ".png", ".gif", ".bmp")))

提示:元组参数是startswith/endswith最强大的特性,可以替代多个or条件的判断。

对比传统写法

代码示例

filename = "report.pdf"

if filename.endswith(".pdf") or filename.endswith(".doc") or filename.endswith(".txt"):
    print("是文档文件")

if filename.endswith((".pdf", ".doc", ".txt")):
    print("是文档文件(元组参数)")

指定范围

通过startend参数可以指定检查的范围:

代码示例

s = "Hello, Python!"

print(s.startswith("Python", 7))
print(s.startswith("Python", 0, 6))
print(s.endswith("Python", 0, 13))

实际应用

代码示例

path = "/home/user/documents/report.pdf"
print(path.startswith("/", 0))
print(path.startswith("documents", path.find("documents")))

实际应用场景

文件类型判断

代码示例

def get_file_type(filename):
    if filename.endswith((".jpg", ".jpeg", ".png", ".gif", ".bmp")):
        return "图片文件"
    elif filename.endswith((".mp3", ".wav", ".flac", ".aac")):
        return "音频文件"
    elif filename.endswith((".mp4", ".avi", ".mkv", ".mov")):
        return "视频文件"
    elif filename.endswith((".pdf", ".doc", ".docx", ".txt")):
        return "文档文件"
    else:
        return "其他文件"

files = ["photo.jpg", "music.mp3", "video.mp4", "report.pdf", "data.csv"]
for f in files:
    print(f"{f}: {get_file_type(f)}")

URL协议检查

代码示例

def check_url(url):
    if url.startswith("https://"):
        return "安全连接(HTTPS)"
    elif url.startswith("http://"):
        return "普通连接(HTTP)"
    elif url.startswith("ftp://"):
        return "文件传输(FTP)"
    elif url.startswith(("mailto:", "tel:")):
        return "特殊协议"
    else:
        return "未知协议"

urls = [
    "https://www.example.com",
    "http://example.com",
    "ftp://files.example.com",
    "mailto:test@example.com",
]

for url in urls:
    print(f"{url}: {check_url(url)}")

数据筛选

代码示例

contacts = [
    "张三-13812345678",
    "李四-15987654321",
    "王五-01012345678",
    "赵六-02198765432",
]

mobile = [c for c in contacts if c.split("-")[1].startswith(("13", "15", "17", "18", "19"))]
landline = [c for c in contacts if c.split("-")[1].startswith(("01", "02"))]

print(f"手机号: {mobile}")
print(f"座机号: {landline}")

日志过滤

代码示例

logs = [
    "[ERROR] Database connection failed",
    "[WARN] Memory usage high",
    "[INFO] User logged in",
    "[ERROR] File not found",
    "[INFO] Task completed",
]

errors = [log for log in logs if log.startswith("[ERROR]")]
print(f"错误日志: {errors}")

代码示例

综合运用startswith和endswith方法:

代码示例

files = [
    "report.pdf",
    "photo.jpg",
    "data.csv",
    "script.py",
    "config.json",
    "style.css",
    "index.html",
]

code_files = [f for f in files if f.endswith((".py", ".js", ".html", ".css", ".json"))]
print(f"代码文件: {code_files}")

image_files = [f for f in files if f.endswith((".jpg", ".png", ".gif"))]
print(f"图片文件: {image_files}")

env_vars = [
    "PATH=/usr/bin",
    "HOME=/home/user",
    "PYTHONPATH=/opt/python",
    "JAVA_HOME=/opt/java",
    "USER=admin",
]

python_vars = [v for v in env_vars if v.startswith("PYTHON")]
print(f"Python相关环境变量: {python_vars}")

sentence = "The quick brown fox jumps over the lazy dog"
vowel_words = [w for w in sentence.split() if w.lower().startswith(("a", "e", "i", "o", "u"))]
print(f"元音开头的单词: {vowel_words}")

注意事项

1. startswith()endswith()返回布尔值,不是索引

2. 元组参数非常实用,但列表或集合不能作为参数,必须是元组

3. 空字符串的前缀/后缀检查始终返回True

4. startend参数遵循切片的"左闭右开"原则

5. 这两个方法区分大小写,如需不区分大小写,先转换为统一大小写

6. 检查单个字符时,也可以用in操作符配合索引,但startswith/endswith更直观


小结

本篇教程详细介绍了str.startswith()str.endswith()方法的用法,包括基本用法、元组参数、指定范围检查以及文件类型判断、URL检查、数据筛选等实际应用场景。元组参数是这两个方法最强大的特性,可以简洁地实现多模式匹配,替代繁琐的or条件判断。


练习题

练习1

给定一个文件名列表 ["report.pdf", "photo.jpg", "data.csv", "script.py", "music.mp3"],请使用endswith()方法将文件分为"文档"(.pdf, .doc, .txt, .csv)和"媒体"(.jpg, .png, .mp3, .mp4)两类。

练习2

编写一个函数,接收一个URL字符串,判断它是否是有效的Web地址(以http://https://开头,且以.com.org.net.cn结尾)。

常见问题

startswith()和endswith()返回值是什么类型?

返回布尔值(True或False),不是索引。如果需要查找子串位置,应使用find()方法。

元组参数可以用列表或集合替代吗?

不可以。startswith和endswith只接受字符串或元组作为参数,列表和集合会导致TypeError。如需使用列表,需先用tuple()转换为元组。

如何进行不区分大小写的前缀/后缀判断?

可以先将字符串统一转为小写或大写,如s.lower().startswith("hello")或s.upper().endswith(".PDF")。

空字符串作为参数会返回什么?

空字符串的前缀/后缀检查始终返回True,因为任何字符串都以空字符串开头和结尾。

start和end参数的范围规则是什么?

遵循切片的"左闭右开"原则,即包含start位置,不包含end位置。例如s.startswith("Py", 0, 2)只检查前两个字符。

小贴士

在处理文件扩展名或URL协议时,强烈建议使用元组参数替代多个or判断。元组参数不仅代码更简洁,而且性能更好。例如:filename.endswith((".jpg", ".png", ".gif")) 比连续三个or判断要优雅得多。

标签: Python字符串 startswith endswith 元组参数 文件类型判断 数据筛选 Python教程

本文涉及AI创作

内容由AI创作,请仔细甄别

list快速访问

上一篇: Python字符串大小写转换 - upper/lower/capitalize/title 下一篇: Python字符串count()方法

poll相关推荐

作者头像 智能小晨 python

Python元组命名namedtuple

发布日期 2026-05-31
深入学习Python命名元组namedtuple,掌握字段访问、_make创建、_asdict转字典、_replace替换字段等核心方法。理解命名元组与普通元组的区别,写出更清晰易读的Python代码。
作者头像 智能小晨 python

Python元组解包

发布日期 2026-05-31
全面学习Python元组解包技巧,包括基本解包、星号扩展解包、嵌套解包、交换变量和函数多值返回。掌握优雅的Python赋值语法,让你的代码更简洁高效。
作者头像 智能小晨 python

Python元组index方法

发布日期 2026-05-31
深入学习Python元组index()方法,掌握元素索引查找技巧。了解index()语法、指定范围查找、安全查找方法和实际应用场景,避免ValueError异常,提升Python编程效率。
作者头像 智能小晨 python

Python元组count方法

发布日期 2026-05-31
深入学习Python元组count()方法,掌握元素出现次数统计技巧。了解count()语法、性能优化建议、嵌套元组统计和实际应用场景,配合练习题巩固所学知识。