Python字符串处理全攻略(三):常用内置方法轻松掌握

2023-12-24 06:02:27

引言

欢迎来到Python的世界!字符串是Python中最基本的数据类型之一,它们就像是文本的小盒子,可以帮我们存储和处理各种各样的文本数据。

Python非常贴心地为我们提供了许多内置方法来处理这些字符串。这些方法就像是魔法工具,可以帮助我们完成各种神奇的文本操作和转换。

今天,我们继续探索常用的Python字符串内置方法。我会用最简单的语言,通过具体的示例代码,详细解释每个方法的使用方法和应用场景。让我们一起开始这个有趣的Python字符串之旅吧!

Python字符串处理全攻略(一):常用内置方法轻松掌握
Python字符串处理全攻略(二):常用内置方法轻松掌握

Python字符串常用内置方法

str.index()

功能介绍

index() 可用于查找子字符串在字符串中首次出现的位置。如果找不到子字符串,则会引发一个 ValueError 异常。

语法

str.index(sub, start=0, end=len(string))
  • sub:要查找的子字符串。
  • startend:可选参数,指定查找的子字符串的起始和结束位置。

示例

  1. 使用起始和结束位置:
s = "hello world, how are you?"
print(s[6:15])  # world, ho
print(s.index("world", 6, 15))  # 输出: 6

s = "hello world, how are you?"
print(s[8:15])  # rld, ho
print(s.index("world", 8, 15))  # 输出: ValueError: substring not found
  1. 查找不存在的子字符串:
s = "hello world"
try:
    print(s.index("python"))  # 会引发 ValueError 异常
except ValueError as e:
    print(e)  # 输出: 'substring not found'
  1. 使用负数索引:
s = "hello world"
print(s.index("r", -5, -2))  # 输出: 8 (从倒数第5个字符开始,到倒数第3个字符为止,找到第一个 'r')

s = "hello world"
print(s.index("l", -5, -2))  # 输出: ValueError: substring not found (从倒数第5个字符开始,到倒数第3个字符为止,找到第一个 'l')

注意事项

  • 当使用 index() 方法时,应确保要查找的子字符串确实存在于原始字符串中,否则会引发异常。为了避免异常,可以使用 find() 方法代替,它在找不到子字符串时会返回 -1 而不是引发异常。
  • 使用负数索引时,注意索引的有效范围。在 Python 中,-1 表示最后一个字符,-2 表示倒数第二个字符,以此类推。
  • 当使用起始和结束位置参数时,应确保这些参数的有效性,即它们不应该超出字符串的长度或为负数。否则,ValueError 异常会被引发。
  • 如果查找的子字符串有多个相同的实例,index() 方法只会返回第一个实例的位置。如果需要找到所有实例的位置,可以考虑使用其他方法或自己编写循环来遍历并查找。
  • 注意大小写敏感性。默认情况下,index() 方法是大小写敏感的,所以 “Hello” 和 “hello” 是不同的字符串。如果要进行大小写不敏感的比较,可以先将字符串转换为全部小写或全部大写。

总结

index() 方法是一个非常实用的字符串方法,用于查找子字符串在字符串中的位置。但使用时需要注意可能引发的异常和索引的有效范围。与 find() 方法相比,index() 方法更为严格,要求子字符串必须存在。在实际应用中,可以根据需求选择使用 index()find() 方法。


str.startswith()

功能介绍

startswith() 可用于检查字符串是否以指定的前缀开始。如果字符串以给定的前缀开始,则返回 True,否则返回 False

语法

str.startswith(prefix, start=0, end=len(string))
  • prefix:要检查的前缀。
  • startend:可选参数,表示在字符串的哪个范围内进行前缀检查。

示例

  1. 常规操作
s = "hello world"
print(s.startswith("hello"))  # 输出: True
print(s.startswith("world"))  # 输出: False
  1. 使用 startend 参数:
s = "hello world"
print(s[3:])
print(s.startswith("lo", 3))  # 输出: True
print(s[2:6])
print(s.startswith("lo", 2, 6))  # 输出: False

运行结果:

在这里插入图片描述

注意事项

  • startswith() 是大小写敏感的,所以 “Hello” 和 “hello” 被视为不同的前缀。
  • 如果要忽略大小写,可以先将字符串转换为全小写或全大写,然后再使用 startswith()
  • 注意 startend 参数是可选的,默认情况下它们分别为 0 和字符串的长度。这表示整个字符串都会被检查。
  • 如果提供的 prefix 是空字符串,则任何字符串都会返回 True,因为任何非空字符串都以空字符串开始。

str.expandtabs()

功能介绍

expandtabs() 可用于将字符串中的制表符(\t)转换为一定数量的空格。该方法默认将制表符转换为 8 个空格,但也可以通过提供一个可选参数来指定不同的空格数量。

语法

str.expandtabs(tabsize=8)
  • tabsize:可选参数,指定转换后的制表符应占用的空格数量。默认值为 8。

示例

  1. 常规操作
s = "hello\tworld"
print(s.expandtabs())  # 输出: 'hello    world'(其中 \t 被替换为 8 个空格)
  1. 指定不同的 tabsize
s = "a\tb\tc\td"
print(s.expandtabs(2))  # 输出: 'a b c d'(每个 \t 被替换为 2 个空格)
  1. 在字符串中有多个制表符:
s = "a\tb\tc\td"
print(s.expandtabs(2))  # 输出: 'a       b       c       d'(每个 \t 被替换为 8 个空格)
  1. tabsize 为 0 的情况:
s = "h\te\tl\tl\to\tworld"
print(s.expandtabs(0))  # 输出: 'helloworld'(\t 被完全删除)
  1. 使用 expandtabs() 处理多行(字符串含有\n)字符串:
s = "line1\tcol2\nline2\tcol2"
print(s.expandtabs(2))  # 输出:(每一行的 \t 都被替换为 2 个空格)
# line1 col2
# line2 col2

注意事项

  • expandtabs() 方法返回一个新的字符串,原始字符串不会被修改(因为字符串在 Python 中是不可变的)。
  • 如果 tabsize 参数小于 1,该方法将制表符视为零宽度,从而删除它们。
  • 如果一个字符串中有多个制表符,它们都将被转换为相同数量的空格。
  • 该方法在处理多行文本时特别有用,因为它可以确保文本在具有固定宽度字体的编辑器或控制台中正确对齐。

总结

expandtabs() 方法提供了一种简单的方式来处理字符串中的制表符,使它们可以被转换为一定数量的空格。这对于格式化文本、确保文本对齐或在处理从其他来源获取的包含制表符的文本时非常有用。通过调整 tabsize 参数,你可以控制转换后的空格数量,以适应不同的格式需求。


str.splitlines()

功能介绍

splitlines() 可用于根据行边界符来拆分字符串。该方法返回一个列表,其中每个元素都是原始字符串的一行。默认情况下,splitlines() 会考虑所有常见的行边界符,如换行符 \n、回车符 \r 以及回车加换行 \r\n

语法

str.splitlines(keepends=False)
  • keepends:可选参数。默认为 False,意味着返回的行不包括行边界符。如果设为 True,则返回的行会保留行边界符。

示例

  1. 常规操作
text = "Hello\nWorld\n"
lines = text.splitlines()
print(lines)  # 输出: ['Hello', 'World']
  1. 使用 keepends=True
text = "Hello\nWorld\n"
lines = text.splitlines(keepends=True)
print(lines)  # 输出: ['Hello\n', 'World\n']
  1. 处理混合的行边界符:
text = "Hello\r\nWorld\nPython"
lines = text.splitlines()
print(lines)  # 输出: ['Hello', 'World', 'Python']
  1. 空字符串和只有一个行边界符的字符串:
text1 = ""
text2 = "\n"
print(text1.splitlines())  # 输出: []
print(text2.splitlines())  # 输出: [''] 或(如果 keepends=True)['\n']
  1. 使用非常见的行边界符:
text = "Hello\vWorld"  # \v 是垂直制表符,也可以作为行边界符
lines = text.splitlines()
print(lines)  # 输出: ['Hello', 'World']

注意事项

  • splitlines() 方法不会改变原始字符串。
  • 如果字符串为空或只包含行边界符,那么返回的列表可能为空或只包含空字符串。具体取决于 keepends 参数的设置。
  • 该方法对于处理文本文件或需要按行操作的文本数据非常有用。
  • 不同的操作系统可能使用不同的行边界符 ? 使用 splitlines() 可以确保跨平台的兼容性。
  • splitlines() 只考虑行边界符,不会根据其他字符(如空格或制表符)来拆分字符串。

总结

splitlines() 是一个在处理文本数据时非常有用的方法,特别是当你需要按行操作或解析文本文件时。它提供了一个简单的方式来拆分字符串成行,并允许你选择是否保留行边界符。


str.swapcase()

功能介绍

swapcase() 可用于将字符串中的所有大写字母转换为小写字母,所有小写字母转换为大写字母。

语法

str.swapcase()

示例

  1. 常规操作
s = "Hello World"
print(s.swapcase())  # 输出: hELLO wORLD
  1. 处理全大写或全小写的字符串:
s1 = "HELLO"
print(s1.swapcase())  # 输出: hello
s2 = "world"
print(s2.swapcase())  # 输出: WORLD

注意事项

  • swapcase() 方法不会改变原始字符串。它会返回一个新的字符串,该字符串是原始字符串的大小写转换版本。原始字符串保持不变。
  • 该方法不会考虑非字母字符的大小写状态,只转换字母部分。非字母字符保持不变。
  • 在处理多个字符的字符串时,要确保正确处理字符串中的每个字符。大小写转换可能会影响字符串的语义和格式。
  • 在处理用户输入或来自不可靠源的字符串时,要格外小心,因为大小写转换可能会导致意外的结果或安全问题(例如,将敏感信息从大写转换为小写)。

结束语

  • 亲爱的读者,感谢您花时间阅读我们的博客。我们非常重视您的反馈和意见,因此在这里鼓励您对我们的博客进行评论。
  • 您的建议和看法对我们来说非常重要,这有助于我们更好地了解您的需求,并提供更高质量的内容和服务。
  • 无论您是喜欢我们的博客还是对其有任何疑问或建议,我们都非常期待您的留言。让我们一起互动,共同进步!谢谢您的支持和参与!
  • 我会坚持不懈地创作,并持续优化博文质量,为您提供更好的阅读体验。
  • 谢谢您的阅读!

文章来源:https://blog.csdn.net/qq_41813454/article/details/135177265
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。