jajaj

news/2025/3/14 17:38:30/
  • Docs »
  • 第二章:字符串和文本 »
  • 2.2 字符串开头或结尾匹配
  • Edit on GitHub

2.2 字符串开头或结尾匹配¶

问题¶

你需要通过指定的文本模式去检查字符串的开头或者结尾,比如文件名后缀,URL Scheme等等。

解决方案¶

检查字符串开头或结尾的一个简单方法是使用 str.startswith() 或者是 str.endswith() 方法。比如:

>>> filename = 'spam.txt'
>>> filename.endswith('.txt')
True
>>> filename.startswith('file:')
False
>>> url = 'http://www.python.org'
>>> url.startswith('http:')
True
>>>

如果你想检查多种匹配可能,只需要将所有的匹配项放入到一个元组中去, 然后传给 startswith() 或者 endswith() 方法:

>>> import os
>>> filenames = os.listdir('.')
>>> filenames
[ 'Makefile', 'foo.c', 'bar.py', 'spam.c', 'spam.h' ]
>>> [name for name in filenames if name.endswith(('.c', '.h')) ]
['foo.c', 'spam.c', 'spam.h'
>>> any(name.endswith('.py') for name in filenames)
True
>>>

下面是另一个例子:

from urllib.request import urlopendef read_data(name):if name.startswith(('http:', 'https:', 'ftp:')):return urlopen(name).read()else:with open(name) as f:return f.read()

奇怪的是,这个方法中必须要输入一个元组作为参数。 如果你恰巧有一个 list 或者 set 类型的选择项, 要确保传递参数前先调用 tuple() 将其转换为元组类型。比如:

>>> choices = ['http:', 'ftp:']
>>> url = 'http://www.python.org'
>>> url.startswith(choices)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: startswith first arg must be str or a tuple of str, not list
>>> url.startswith(tuple(choices))
True
>>>

讨论¶

startswith()endswith() 方法提供了一个非常方便的方式去做字符串开头和结尾的检查。 类似的操作也可以使用切片来实现,但是代码看起来没有那么优雅。比如:

>>> filename = 'spam.txt'
>>> filename[-4:] == '.txt'
True
>>> url = 'http://www.python.org'
>>> url[:5] == 'http:' or url[:6] == 'https:' or url[:4] == 'ftp:'
True
>>>

你可以能还想使用正则表达式去实现,比如:

>>> import re
>>> url = 'http://www.python.org'
>>> re.match('http:|https:|ftp:', url)
<_sre.SRE_Match object at 0x101253098>
>>>

这种方式也行得通,但是对于简单的匹配实在是有点小材大用了,本节中的方法更加简单并且运行会更快些。

最后提一下,当和其他操作比如普通数据聚合相结合的时候 startswith()endswith() 方法是很不错的。 比如,下面这个语句检查某个文件夹中是否存在指定的文件类型:

if any(name.endswith(('.c', '.h')) for name in listdir(dirname)):
...

© Copyright 2017, 熊能. Revision fc3b417c.

Built with Sphinx using a theme provided by Read the Docs.

转载于:https://www.cnblogs.com/crawer-1/p/8202852.html


http://www.ppmy.cn/news/918175.html

相关文章

java/AJAX

1) asynchronous javascript and xml(异步的 javascript 和 xml)。 为了解决传统的 web 应用当中“等待-响应-等待"的弊端而创建的一种技术&#xff0c;其实质可以理解 为:使用浏览器内置的一个对象(XmlHttpRequest)向服务器发送请求&#xff0c;服务器返回 xml 数据 戒者…

pip install mysqlclient安装

很长时间以来&#xff0c;在安装mysqlclient时&#xff0c;一直安装不上&#xff0c;当安装好mysql电脑端的客户端时&#xff0c;很轻易就可以安装上了&#xff0c;只是在安装mysql8.0时&#xff0c;每次安装完以后&#xff0c;就无法连接&#xff0c;说初始密码错误&#xff0…

JYaml

JYaml JYaml支持的数据类型&#xff1a; 原始数据类型和封装类&#xff08;int,java.lang.Integer&#xff09;JavaBean兼容对象&#xff08;结构支持&#xff09;collection(sequence支持) ListSet Map&#xff08;map支持&#xff09;Arrays&#xff08;sequence支持&#…

PhpSpreadsheet怎么设置单元格边框

$styleArray [borders > [allBorders > [borderStyle > Border::BORDER_THIN //细边框]] ];$worksheet->getStyle(A1:N1)->applyFromArray($styleArray);说明&#xff1a; $worksheet是PhpOffice\PhpSpreadsheet\Worksheet的实例 $styleArray中borders数组中支…

A jax

Ajax 让浏览器跟服务器交互的一套API. 作用就是可以让浏览器和服务器进行交互。服务器 服务器 就是提供某种服务的 电脑(机器)常见的服务器有以下几种&#xff1a;- 数据库服务 - 文件服务 - 多媒体服务(音视频) - 邮件服务 - Web服务前端访问服务器的几种方式 1.直接输入网址2…

java ajax教程_AJAX Java

AJAX Java 需求&#xff1a;完成一个异常获取后台服务器的当前时间。 一、页面制作一个按钮 当前服务器的时间为&#xff1a; 二、编写JS异步提交请求后台 window.onload function(){ document.getElementById("btn").onclick function(){ //异步方式请求后台 //以…

java jackson包_jackson.jar

jackson.jar是一款在进行java开发时经常需要使用到的jar架包如果您的工具架包内缺少了这款jackson.jar不妨马上下载这款多功能的jackson.jar来保证您严谨的开发过程。。 相关软件软件大小版本说明下载地址 jackson.jar是一款在进行java开发时经常需要使用到的jar架包,如果您的工…