Python字符串对齐、删除字符串不需要的内容以及格式化打印字符

发布时间:2026/10/13 3:35:32
Python字符串对齐、删除字符串不需要的内容以及格式化打印字符 前言这篇讲三个常在同一个场景里出现的需求把文本对齐成整齐的列、删掉字符串里多余的部分、以及把结果格式化打印出来。做命令行报表、日志对齐、表格化输出时这三件事往往一起用。三个需求各有一个最容易记错的地方先把它们点出来。对齐方面ljust、rjust、center的宽度参数是「目标总长度」而不是「要补几个字符」——如果原串已经比宽度长会原样返回一个字符都不补。删除方面strip(chars)的参数是字符集合不是前缀官方文档专门举了Arthur: three!.lstrip(Arthur: )得到ee!的例子——它把集合里的每个字符都从左边削掉削到r就停了因为r也在集合里——想删「完整前缀」必须用 3.9 起的removeprefix。格式化打印方面print()的sep、end、file、flush都只能按关键字传写成位置参数会报错。把这三块拆开看都不难难的是组合使用时心里有数哪一步是返回新字符串几乎全都是哪一步会原地改print也不是原地改它是写输出流。本文逐个讲清并给出一个凑成表格输出的实战。一、对齐四个方法str自带四个填充方法签名里fillchar都必须只传一个字符而且都是仅位置参数方法效果例子s.ljust(width)左对齐右侧补Python.ljust(10)→Python s.rjust(width)右对齐左侧补Python.rjust(10)→ Pythons.center(width)居中两侧补Python.center(10)→ Python s.zfill(width)左侧补042.zfill(5)→00042# 适用于 Python 3.8print(Python.ljust(10, .)) # Python....print(Python.rjust(10, .)) # ....Pythonprint(Python.center(10, -)) # --Python--print(Python.center(4)) # Python —— 宽度不够原样返回print(42.zfill(5)) # 00042print(-42.zfill(5)) # -0042 —— 负号保留零补在数字前几个必须记牢的细节宽度是目标总长度。原串长度大于等于width时方法返回原串是等值的副本不截断。center在两侧补不平时多余的填充放在右边受width - len(s)的奇偶影响。zfill比较特殊它不是简单左补零而是识别正负号把零插在符号和数字之间。对42、-42都会得到正确的0042、-0042。zfill的填充字符固定是0不能换。还有一个处理制表符的方法expandtabs(tabsize8)把\t展开成若干空格让列宽按制表位对齐# 适用于 Python 3.8print(a\tbc\tdef.expandtabs(4))它按「当前列号决定补几个空格」的规则展开遇到\n或\r会把列号归零重新算。默认tabsize8。二、用 format 说明符对齐上面的方法只能左/右/居中三种格式说明符format spec更灵活能自由指定填充字符和方向# 适用于 Python 3.8print({:10}.format(abc)) # abc 右对齐print({:10}.format(abc)) # abc 左对齐print({:^10}.format(abc)) # abc 居中print({:*^10}.format(abc)) # ***abc**** 用 * 填充居中print({:05}.format(42)) # 00042 右对齐补零f-string 的写法完全一样f{name:10}。注意一个版本差异在宽度前加0如{:05}在过去会影响字符串的默认对齐方式从Python 3.10 起不再影响字符串只对数字生效。所以给字符串补零要显式写{:05}别依赖{:05}。对齐方式的选择可以总结为想补在用哪个右边左对齐ljust或{:w}左边右对齐rjust或{:w}两侧center或{:^w}数字左侧补零保留符号zfill或{:0w}数字三、删掉不需要的内容删除分两条路按字符集合削掉两端或按子串/前缀删除。1. strip 家族参数是字符集合# 适用于 Python 3.8print( spacious .strip()) # spaciousprint(www.example.com.strip(cmowz.)) # exampleprint(Arthur: three!.lstrip(Arthur: )) # ee!strip(charsNone)省略参数或传None时删空白此时判定的空白字符以str.isspace()为准。传了chars它就是集合语义从两端开始只要字符在集合里就削掉遇到不在集合里的字符立刻停。lstrip只管左端rstrip只管右端。同一个字符集合语义的还有re.sub之外的场景但注意strip不会删除字符串中间的字符。要删中间的得用replace。2. removeprefix / removesuffix按完整前缀3.9# 适用于 Python 3.9print(Arthur: three!.removeprefix(Arthur: )) # three!print(MiscTests.removesuffix(Tests)) # Miscprint(BaseTestCase.removeprefix(Test)) # BaseTestCase 不匹配就原样返回这两个方法只在开头/结尾确实是这个完整子串时才删且只删一次。3.9 之前用切片实现# 适用于 Python 3.8 及更早s, prefix TestHook, Testif s.startswith(prefix):s s[len(prefix):]3. replace 和 translate删中间内容# 适用于 Python 3.8print(a-b-c.replace(-, )) # abctable str.maketrans(, , aeiou) # 第三个参数是要删除的字符print(hello world.translate(table)) # hll wrldstr.maketrans(, , 要删的字符)是「只删不换」的写法translate一次扫描完成比连写几个replace干净。四、格式化打印print(*objects, sep , end\n, fileNone, flushFalse)的四个可选参数都只能按关键字传参数默认作用sep 多个参数之间的分隔符end\n结尾追加的字符file标准输出输出到哪个流flushFalse是否立刻冲刷缓冲# 适用于 Python 3.8import sysprint(a, b, c, sep-) # a-b-cprint(加载中, end) # 不换行print(完成) # 接在上一行后面print(错误, filesys.stderr) # 输出到标准错误把三块合起来做一个对齐的表格输出# 适用于 Python 3.8rows [(Alice, 88, A),(Bob, 72, C),(Christopher, 95, A),]header (姓名, 分数, 等级)widths (14, 6, 6)line .join(h.center(w) for h, w in zip(header, widths))print(line)print(- * len(line))for name, score, grade in rows:print(f{name.ljust(widths[0])} f{str(score).rjust(widths[1])} f{grade.center(widths[2])})这里ljust/rjust/center负责列对齐f-string 负责把值填进去print负责逐行输出。名字列用左对齐、分数列用右对齐数字右对齐才好看、等级列居中是报表的常规选择。常见坑点以为 strip 的参数是前缀❌www.example.com.strip(www.)期望得到example.com实际得到example✅ 删完整前缀用removeprefix(www.)3.9或先startswith判断再切片以为 ljust 会把长串截断❌Monty Python.ljust(5)期望得到Monty实际原样返回Monty Python✅ 宽度不够时方法不截断要截断得自己切片s[:5]fillchar 传了多个字符❌x.center(5, --)→TypeError: The fill character must be exactly one character long✅ 填充字符只能是一个字符x.center(5, -)给字符串用{:05}补零却没得到零❌ 在 3.10 里{:05}.format(42)得到42 ✅ 显式写对齐{:05}.format(42)或直接用42.zfill(5)把 print 的 sep / end 当位置参数传❌print(a, b, -)想用-作分隔符结果输出a b -✅print(a, b, sep-)忘了 flush 导致输出「卡住」❌ 长时间运行的程序里用print(..., end)画进度屏幕半天不刷新输出被缓冲✅ 传flushTrue或直接用print(..., end, flushTrue)strip 删不掉中间的内容❌a b c.strip()想删掉中间空格实际中间的空格原样保留✅ 删中间用replace( , )或用 .join(s.split())规范化内部空白expandtabs 对齐对不上❌ 以为\t固定等于 8 个空格实际补齐是把「当前列」推到下一个制表位列宽随前面内容变化✅ 对齐表格优先用ljust/rjust显式指定宽度别指望\t对齐总结需求写法左 / 右 / 居中ljust/rjust/center参数是目标总长度数字补零zfill保留符号或{:0w}说明符对齐{:w}、{:w}、{:^w}、{:*^w}删两端字符集合strip(chars)/lstrip/rstrip参数是集合不是前缀删完整前缀removeprefix/removesuffix3.9删中间内容replace或maketranstranslate格式化打印print(*objs, sep..., end..., flush...)三块知识里真正的分界线只有一条strip系列是「按字符集合削两端」removeprefix/removesuffix才是「按完整前缀删」。把这条刻进脑子再去记ljust的宽度是总长度、print的可选参数只能关键字传配合说明符对齐任何命令行表格和报表都能排得整整齐齐。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询