Python的partition字符串函数

本文介绍了Python 2.5版本中新引入的partition函数及其应用场景,对比了与split函数的区别,并展示了如何利用该函数简化字符串处理流程。此外,还提到了startswith和endswith方法在新版中的增强。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在2.5版中新增加了一个叫partition的函数,它可以做什么呢?举一个小例子:

>>> ‘http://www.donews.net/limodou’.partition(‘://’)
(‘http’, ‘://’, ‘www.donews.net/limodou’)
>>> ‘file:/a.html’.partition(‘://’)
(‘file:/a.html’, ”, ”)

从第一个例子可以看出,它用来根据指定的分隔符将字符串进行分割,如果字符串包含指定的分隔符,则返回一个3元的tuple,第一个为分隔符左边的子串,第二个为分隔符本身,第三个为分隔符右边的子串。第二个例子说明,如果找不到指定的分隔符,则返回仍然是一个3元的tuple,第一个为整个字符串,第二和第三个为空串。

那么有人要问,它与split(sep, 1)有什么区别呢?首先split返回的可能不是固定长度的返回值,它返回的是一个list,如果找到,则返回一个2元list,如果没找到,则返回一个1元的list,如:

>>> ‘a.b.c’.split(‘,’, 1)
['a.b.c']
>>> ‘a.b.c’.split(‘.’, 1)
['a', 'b.c']

同时在找到的情况下,它并不返回分隔符。

在某些情况下partition(sep)和rpartition(sep)(从右向左匹配)与split(sep, 1)和rsplit(sep, 1)的功能是类似的。不过partition其实是为了替换find,index而产生的,并不是为了替换split而产生的。在许多情况下,我们需要先通过find来找到一个位置,再进行分割。而使用partition就方便得多。如:

>>> a = ‘http://www.donews.net’
>>> pos = a.find(‘://’)
>>> if pos > -1:
…     print a[:pos], a[pos+1:]
http www.donews.net

而使用partition:

>>> a = ‘http://www.donews.net’
>>> left, sep, right = a.partition(‘://’)
>>> print left, right
http www.donews.net

是不是简单一些呢。

同时在2.5版中,startswith和endswith有变化,它的第一个参数可以是一个tuple了。这样用在判断几种情况的时候非常方便。比如要判断文件名后缀,原来只支持一个值时,可能要先拆分,再判断,用不上endswith,如:

>>> a = ‘a.gif’
>>> import os.path
>>> ext = os.path.splitext(a)[1]
>>> if ext in ['.gif', '.png', '.bmp']:
…     print ‘found’

found

而现在可以:

>>> a = ‘a.gif’
>>> if a.endswith((‘.gif’, ‘png’, ‘.bmp’)):
…     print ‘found’

found

是不是简单多了。注意,上面的tuple我换成list就是不行,看来是强制的。

许多有趣的东西等着你我来发现。

### Python 字符串处理函数列表 以下是完整的 Python 字符串处理函数列表及其功能概述: #### 基本字符串操作 1. **capitalize()**: 将字符串的第一个字母转换为大写,其余部分转为小写。 示例: `'hello'.capitalize()` 返回 `'Hello'`[^1]。 2. **casefold()**: 提供更强大的大小写折叠能力,适用于不区分大小写的匹配场景。 示例: `'HELLO'.casefold()` 返回 `'hello'`。 3. **center(width[, fillchar])**: 返回一个居中的字符串,宽度由 `width` 指定,可选填充字符默认为空格。 示例: `'py'.center(8, '-')` 返回 `'--py----'`。 4. **count(sub[, start[, end]])**: 统计子字符串 `sub` 在字符串中出现的次数,支持指定起始位置和结束位置。 示例: `'banana'.count('a')` 返回 `3`。 5. **encode([encoding[, errors]])**: 使用指定编码方式对字符串进行编码,默认为 UTF-8 编码。 示例: `'你好'.encode('utf-8')` 返回 `b'\xe4\xbd\xa0\xe5\xa5\xbd'`。 6. **endswith(suffix[, start[, end]])**: 判断字符串是否以指定后缀结尾,支持指定范围检查。 示例: `'world.txt'.endswith('.txt')` 返回 `True`。 7. **expandtabs(tabsize=8)**: 替换字符串中的 `\t` 为指定数量的空格,默认为 8 个空格。 示例: `'a\tb'.expandtabs(4)` 返回 `'a b'`。 8. **find(sub[, start[, end]])**: 查找子字符串的位置索引,找不到则返回 `-1`。 示例: `'abcde'.find('c')` 返回 `2`。 9. **format(*args, **kwargs)**: 格式化字符串,替换 `{}` 中的内容。 示例: `'Hi {}!'.format('Tom')` 返回 `'Hi Tom!'`。 10. **index(sub[, start[, end]])**: 类似于 `find()` 方法,但如果未找到会抛出异常。 示例: `'abcde'.index('d')` 返回 `3`。 --- #### 高级字符串操作 11. **isalnum()**: 如果字符串只包含字母或数字且至少有一个字符,则返回 `True`。 示例: `'abc123'.isalnum()` 返回 `True`。 12. **isalpha()**: 如果字符串只包含字母且至少有一个字符,则返回 `True`。 示例: `'abc'.isalpha()` 返回 `True`。 13. **isdigit()**: 如果字符串只包含数字字符且至少有一个字符,则返回 `True`。 示例: `'123'.isdigit()` 返回 `True`。 14. **islower()**: 如果字符串中所有字母都是小写字母且至少有一个字母,则返回 `True`。 示例: `'hello'.islower()` 返回 `True`。 15. **isspace()**: 如果字符串只包含空白字符且至少有一个字符,则返回 `True`。 示例: `' \t\n '.isspace()` 返回 `True`。 16. **istitle()**: 如果字符串是一个标题化的字符串(即每个单词首字母大写),则返回 `True`。 示例: `'This Is A Title'.istitle()` 返回 `True`。 17. **isupper()**: 如果字符串中所有字母都是大写字母且至少有一个字母,则返回 `True`。 示例: `'HELLO'.isupper()` 返回 `True`。 --- #### 子字符串分割与连接 18. **join(iterable)**: 连接序列中的元素并用调用该方法的字符串作为分隔符。 示例: `'-'.join(['a', 'b', 'c'])` 返回 `'a-b-c'`。 19. **split(sep=None, maxsplit=-1)**: 按照指定分隔符拆分字符串,最多执行 `maxsplit` 次分裂。 示例: `'apple orange banana'.split(maxsplit=1)` 返回 `['apple', 'orange banana']`[^2]。 20. **rsplit(sep=None, maxsplit=-1)**: 从右向左按照指定分隔符拆分字符串。 示例: `'apple orange banana'.rsplit(maxsplit=1)` 返回 `['apple orange', 'banana']`。 21. **partition(sep)**: 把字符串分为三部分 `(头, 分隔符, 尾)`,如果没有找到分隔符,则头部为整个字符串,其他两部分为空。 示例: `'python.org'.partition('.')` 返回 `('python', '.', 'org')`。 22. **rpartition(sep)**: 和 `partition()` 类似,但从右边开始寻找分隔符。 示例: `'www.python.org'.rpartition('.')` 返回 `('www.python', '.', 'org')`。 --- #### 删除多余字符 23. **strip(chars=None)**: 移除字符串两端的指定字符,默认移除空白字符。 示例: `' python '.strip()` 返回 `'python'`。 24. **rstrip(chars=None)**: 只删除字符串右侧的指定字符。 示例: `'python\n'.rstrip('\n')` 返回 `'python'`。 25. **lstrip(chars=None)**: 只删除字符串左侧的指定字符。 示例: `'\t\tpython'.lstrip()` 返回 `'python'`。 --- #### 大小写转换 26. **lower()**: 转换字符串中所有大写字母为小写。 示例: `'PYTHON'.lower()` 返回 `'python'`。 27. **upper()**: 转换字符串中小写字母为大写。 示例: `'python'.upper()` 返回 `'PYTHON'`。 28. **swapcase()**: 转换字符串中所有大写字母为小写,反之亦然。 示例: `'PyThOn'.swapcase()` 返回 `'pYtHoN'`。 29. **title()**: 将字符串转化为标题形式,即将每个单词的首字母变为大写。 示例: `'this is a title'.title()` 返回 `'This Is A Title'`。 --- #### 其他实用工具 30. **replace(old, new[, count])**: 替换字符串中的旧子字符串为新子字符串,可控制替换次数。 示例: `'one one was a race horse'.replace('one', 'two', 1)` 返回 `'two one was a race horse'`。 31. **zfill(width)**: 返回长度为 `width` 的字符串副本,在原字符串前补零使其达到所需长度。 示例: `'42'.zfill(5)` 返回 `'00042'`。 32. **startswith(prefix[, start[, end]])**: 判断字符串是否以指定前缀开头,支持指定范围检查。 示例: `'hello world'.startswith('he')` 返回 `True`。 --- ```python s = " Hello Python " print(s.strip()) # 输出:"Hello Python" print(s.lower()) # 输出:" hello python " print(s.upper()) # 输出:" HELLO PYTHON " print(s.replace(" ", "-")) # 输出:"-Hello-Python-" ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值