Python textwrap库详解:文本填充、缩进、去缩进与截断
本文深入解析Python标准库textwrap,涵盖文本填充、缩进控制、去缩进及截断四大核心功能。通过fill、indent、dedent和shorten等方法的实际代码示例,展示如何高效处理多行文本的排版、对齐与截取,适用于日志打印、文档生成及前端展示等场景。
一、前言
此前的内容主要聚焦于基础字符串数据的处理。本文将介绍专门用于处理多文本段落的textwrap库。该库提供了对段落缩进、文本填充以及内容截取等操作的支持,能够简化复杂文本格式的处理流程。
在开发自定义打印程序时,利用该库校正文档格式十分便捷,能显著提升文本格式处理的效率。接下来,我们将逐步深入探讨textwrap库的具体用法。
二、切割文档
通常,英文文档在不考虑手动换行的情况下,默认会一直填充当前行直到达到最大宽度才切换至下一行。若我们需要强制规定每行必须且仅包含50个字符,应如何处理?
可以使用textwrap.fill方法来实现,具体代码示例如下:
import textwrap
content = ""
with open('英文文档.txt', 'r', encoding='utf-8') as f:
content = f.read()
print(content)
print("----")
print(textwrap.fill(content, width=50))
运行代码后,分割线下方展示了经textwrap.fill处理后的文档效果:

读者可自行测试验证,确保每行字符数(含空格)不超过50个,且未出现意外的缩进效果。
三、文本缩进
既然textwrap.fill无法直接实现文档缩进,接下来我们将介绍另一个函数:textwrap.indent()。
import textwrap
content = ""
with open('英文文档.txt', 'r', encoding='utf-8') as f:
content = f.read()
print(textwrap.indent(content," "))
textwrap.indent()函数接收两个参数:待缩进的字符串以及用于缩进的字符序列。例如,若指定缩进字符为两个空格,则字符串的每一行前都会自动添加两个空格的缩进。

此外,我们还可以针对特定行应用缩进。textwrap.indent()函数支持第三个参数predicate,通过传入一个判断方法可设置特定规则。具体代码如下:
import textwrap
def choice_line(line):
return len(line) % 2 == 0
content = ""
with open('英文文档.txt', 'r', encoding='utf-8') as f:
content = f.read()
indent_str = textwrap.indent(content, " ",predicate=choice_line)
print(indent_str)
在此示例中,设定的规则为:当某行字符串长度除以2的余数为0时,该行进行缩进;否则不缩进。运行后的效果如下:

四、文本去缩进
既然存在添加缩进的功能,自然也有反向操作,即去除缩进。下面通过textwrap.dedent()函数来演示如何去除文本缩进。
import textwrap
content = ""
with open('英文文档.txt', 'r', encoding='utf-8') as f:
content = f.read()
indent_str = textwrap.indent(content, " ")
print(textwrap.dedent(indent_str))
textwrap.dedent()函数仅需传入需要操作的文本作为参数,运行效果如下:

通过上述步骤,我们成功实现了文本缩进的去除。
五、截断文本
除了缩进处理,textwrap库还提供了文本截断功能。例如,许多资讯类App的文章简介常显示为“某某内容……”的形式,这正是截取文本开头部分的结果。textwrap.shorten函数可以完整实现这一功能,且能智能处理英文单词,避免截断在单词中间。
import textwrap
content = ""
with open('英文文档.txt', 'r', encoding='utf-8') as f:
content = f.read()
print(textwrap.shorten(content, 100))
运行后的效果如下:

至此,关于Python格式化文本段落之textwrap库的介绍便告一段落。如需了解更多Python textwrap库的相关内容,欢迎查阅本站过往文章或继续浏览后续文章,希望大家以后多多支持本站!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













