用Python 整理字符串格式的 7 种方法

用Python 整理字符串格式的 7 种方法

Python 有很多优点,可以用在不同的技术领域,例如数据科学、Web 开发、自动化等。开发人员在这些技术中选择 Python 的原因之一是 Python 确实可以节省时间。另外,用 Python 开发程序真的很有意思!

图源:Unsplash 摄影:Andrew Neel

在我的开发人员生涯中,字符串操作是使用Python最轻松愉快的时刻之一。我第一次学习如何使用 f-strings 时,我真的非常喜欢这个过程,但在这之前我并没有很重视字串符方法。于是,我重新研究了字符串方法,并且发现,如果我正确使用这些方法,就可以缩短程序行数。

在本文中,我们将学习在不使用f-string 技巧的情况下,如何使用内置字符串方法来整理字符串的格式。如果你想了解更多数据分析相关内容,可以阅读以下这些文章:
5个鲜为人知的 Python 库!帮你的下一个NLP项目起航
从Marplotlib到Plotly: 教你入门Python数据可视化
如何征服数据科学面试中的Python编程考试
如何编写出优秀的 Python Class

首先,我将介绍如何对齐字符串,并学习如何调整字符串。然后,我们将继续学习最难的部分——填充。最后,我们将学习到我认为最独特又优雅的整理方法。

首先,让我们从如何对齐字符串开始。

1. center()

图片

center() 图片由作者提供

center() 方法有两个参数:

  • 宽度
  • 要填充的字符(可选)

会返回:

  • 给定长度的居中字符串

宽度是居中后字符串的最终长度。如果宽度小于或等于原始字符串的长度,则不会居中,并返回原始字符串。

>>> "Python".center(20)
'       Python       '
>>> "Python".center(21)
'        Python       '
>>> "Python".center(5)
'Python'

现在,让我们用破折号填充字符串。

>>> "Python".center(26, '-')
'----------Python----------'

很简单,对吧!

2. ljust()

ljust()  图片由作者提供

你可以用 ljust() 字符串方法生成“左对齐”的字符串,它包含两个参数:

  • 宽度
  • 要填充的字符(可选)

返回:

  • 给定长度的左对齐字符串

同样的方法也适用于宽度参数。图片

>>> "Python".ljust(20)
'Python              '
>>> "Python".ljust(26, 'n')
'Pythonnnnnnnnnnnnnnnnnnnnn'

3. rjust()

rjust() 图片由作者提供

你可能已经知道接下来会发生什么。rjust() 具有与 ljust() 类似的功能,会让字符串右对齐。同样,该方法包含两个参数:

  • 宽度
  • 要填充的字符(可选)

返回:

  • 给定长度的右对齐字符串
>>> "Python".rjust(20)
'              Python'
>>> "Python".rjust(26, '.')
'....................Python'

4. zfill()

zfill() — 图片由作者提供

zfill() 方法包含一个参数:

  • 宽度

返回:

  • 左边用零填充的字符串

同样,我们之前看到的关于width的效果仍然有效。

例如:

>>> "python".zfill(10)
'0000python'

如果这里的字符串都是字母,那么这个方法就没有什么用了。但如果字符是数字,该方法就很有用了。

>>> "1234".zfill(10)
'0000001234'

在数字前添加 6 个零。

但这种方法最让人感到不可思议的还有另一个特点,也就是,如果字符串是以 – 或 +(减号或加号)开头,这个方法会把0放在第一个符号字符后面,而不是在加减号的前面。

>>> "-729".zfill(8)
'-0000729'
>>> "+54372".zfill(11)
'+0000054372'
>>> "+positive".zfill(10)
'+0positive'
>>> "-negative".zfill(10)
'-0negative'
>>> "++python".zfill(10)
'+00+python'

5. title()

title() — 图片由作者提供

title() 方法会返回标题格式的字符串。换句话说,这个方法会把每个单词的首字母大写,并小写其余的字母。

>>> "i love python".title()
'I Love Python'
>>> "pyTHoN IS awesOMe".title()
'Python Is Awesome'

如果单词的第一个字符是数字,那么会把数字字符后面的第一个字母大写。

>>> "21sT cEntURy".title()
'21St Century'

值得一提的是,title() 方法有一个缺点,它会把撇号后的第一个字母大写。

>>> "I'm a python developer".title()
"I'M A Python Developer"

所以,在使用 title() 方法时要小心,因为该方法可能会导致预料之外的结果。

6. swapcase()

swapcase() — 图片由作者提供

该方法将小写字符变为大写字母,把大写变成小写。

>>> "pyTHoN IS awesOMe".swapcase()
'PYthOn is AWESomE'

该方法会交换字符的大小写。小写字符变为大写字符,大写字符变为小写字符。

7. casefold()

casefold() — 图片由作者提供

现在,我们来看看我最喜欢的一个方法!女士们先生们,我很自豪地向你们介绍 casefold()。

casefold() 是本文中最有趣的方法,它可以让字符串中的所有字符都小写。

>>> "I love Python".lower() == "I love Python".casefold()
True

不,casefold() 和 lower() 并不一样!可以说,casefold() 是进阶版的 lower() 方法!如下所示:

>>> "die Straße".lower()
'die straße'

现在,用 casefold() :

>>> "die Straße".casefold()
'die strasse'

(注意:straße 是一个德语单词,意思是“街道”。“ß”在德语中表示“ss”[两个小写的“s”]。)

lower() 不会改变 ‘ß’,而 casefold() 可以把 ‘ß’ 转换成 ‘ss’。

通常,lower() 和 upper() 会被用来比较字符串,检查是否满足条件,但有时可能无法正常运行,尤其是当字符串包含非英文字符(非 ASCII 字符)的时候。因此,你可以用 casefold() 验证你的字符串,执行不管大小写的匹配。假设你有一个程序,它可以不区分大小写的格式获取用户地址以及街道名称。

def get_street_name(address):
    return address.lower().removesuffix("strasse")

我们将“Reinhardtstraße”传递给这个函数,期望得到“reinhardt”:

>>> get_street_name("Reinhardtstraße")
'reinhardtstraße'

你可以看到,这不是我们想要的结果,验证失败了。这里的正确的方法是用 casefold() 而不是 lower()。

def get_street_name(address):
    return address.casefold().removesuffix("strasse")

运用到实例中如下:

>>> get_street_name("Reinhardtstraße")
'reinhardt'

总之,casefold() 可以将字符串转换为小写。例如,如果我们想比较 Unicode 标准而不是 ASCII 中的字符串,我们应该使用 casefold() 方法。这种方法将字符串转换为大小写折叠字符串,进行无大小写匹配,使字符串在比较时完全不区分大小写。但是,如果字符串语言是英语或字符串只包含标准 ASCII 字符,那你可以继续用 lower() 。开发人员通常将lower() 称之为小写字符。如果你的目标是比较无大小写字符串,那么我推荐你使用 casefold()。最后,字符串比较是一门比较深的学问。我建议你从多个角度考虑解决方法。

小惊喜:

print("Thank you".ljust(40, "."))
print("for reading".center(40, "."))
print("my article".rjust(40, "."))

输出结果:

Thank you...............................
..............for reading...............
..............................my article

以上就是本文的全部内容!如果你喜欢我的文章,欢迎在评论区留言,订阅我们的公众号!

原文作者:Gorkem Arslan
翻译作者:Lia
美工编辑:过儿
校对审稿:Jiawei Tong
原文链接:https://betterprogramming.pub/7-old-school-string-methods-to-format-your-strings-in-python-b791f880c048?gi=c6105640d3d4