Python轮子:文本自动换行与填充~textwrap

原文链接:http://www.juzicode.com/python-module-textwrap

textwrap 是 Python 标准库中用于文本格式化的模块,主要用于处理长文本的自动换行、缩进和对齐等操作。它非常适合处理需要格式化输出的场景,例如生成报告、格式化日志或美化命令行输出。textwrap 的 API 设计简洁,功能强大,能够轻松解决文本排版问题。

应用场景

  • 生成报告:格式化长文本段落
  • 命令行工具:美化输出内容
  • 文档生成:处理多段文本的缩进和换行
  • 国际化支持:处理多语言混合文本

导入方法

textwrap 是 Python 标准库的一部分,无需额外安装,直接导入即可使用:

import textwrap

基本用法

textwrap 的基本用法涵盖了常见的文本格式化需求,例如自动换行、缩进和填充。以下示例展示了如何通过 textwrap 处理长文本,使其更易于阅读和展示。这些功能非常适合处理用户输入、生成文档或格式化输出内容。

1. 自动换行

将长文本按照指定宽度自动换行,适合格式化段落文本。

#juzicode.com/VX公众号:juzicode
import textwrap

text = "这是一个非常长的文本,需要按照指定的宽度进行换行,以便更好地展示内容。"
wrapped_text = textwrap.fill(text, width=20)
print(wrapped_text)

运行结果:

这是一个非常长的文本,需要按照指定的宽度
进行换行,以便更好地展示内容。

2. 去除缩进

去除多行文本的缩进,适合处理从代码或文档中提取的文本。

#juzicode.com/VX公众号:juzicode
import textwrap

text = """
    这是一个带有缩进的文本。
    每行前面都有多余的空格。
"""
dedented_text = textwrap.dedent(text)
print(dedented_text)

运行结果:

这是一个带有缩进的文本。
每行前面都有多余的空格。

3. 缩进文本

为多行文本添加统一的缩进,适合生成格式化的文档或代码注释。

#juzicode.com/VX公众号:juzicode
import textwrap

text = "这是一个多行文本,每行都需要添加缩进。\njuzicode.com"
indented_text = textwrap.indent(text, prefix="    ")
print(indented_text)

运行结果:

    这是一个多行文本,每行都需要添加缩进。
    juzicode.com

4. 截断文本

将文本截断为指定长度,并在末尾添加省略号,适合生成摘要或预览内容。

#juzicode.com/VX公众号:juzicode
import textwrap

text = "welcome to juzicode.com"
truncated_text = textwrap.shorten(text, width=10, placeholder="...")
print(truncated_text)

运行结果:

welcome...

5. 自定义换行符

在换行时使用自定义的换行符,适合生成特定格式的文本。

#juzicode.com/VX公众号:juzicode
import textwrap

text = "这是一个非常长的文本,需要按照指定的宽度进行换行,并使用自定义换行符。"
wrapped_text = textwrap.fill(text, width=20, replace_whitespace=False, break_on_hyphens=False)
print(wrapped_text)

运行结果:

这是一个非常长的文本,需要按照指定的宽度
进行换行,并使用自定义换行符。

高级功能

textwrap 的高级功能包括更复杂的文本处理需求,例如处理多语言文本、动态调整宽度以及与其他文本处理工具结合使用。以下示例展示了如何利用 textwrap 实现更灵活的文本格式化操作,适用于生成复杂的文档或处理多语言内容。

1. 处理多语言文本

处理包含中文、英文等多语言混合的文本,确保换行符正确。

#juzicode.com/VX公众号:juzicode
import textwrap

text = "这是一个包含中文和English的混合文本,需要正确处理换行。"
wrapped_text = textwrap.fill(text, width=20)
print(wrapped_text)

运行结果:

这是一个包含中文和English的混合文
本,需要正确处理换行。

2. 动态调整宽度

根据文本内容动态调整换行宽度,适合处理不同长度的文本。

#juzicode.com/VX公众号:juzicode
import textwrap

def dynamic_wrap(text, max_width):
    return textwrap.fill(text, width=max_width)

text = "这是一个动态调整宽度的示例,宽度会根据内容自动调整。"
print(dynamic_wrap(text, max_width=30))

运行结果:

这是一个包含中文和English的混合文
本,需要正确处理换行。

3. 结合正则表达式

结合正则表达式处理特殊格式的文本,例如去除多余的空格或换行符。

#juzicode.com/VX公众号:juzicode
import textwrap
import re

text = "这是一个  包含多余空格  的文本。"
cleaned_text = re.sub(r'\s+', ' ', text)
wrapped_text = textwrap.fill(cleaned_text, width=20)
print(wrapped_text)

运行结果:

这是一个 包含多余空格 的文本。

4. 生成表格格式文本

生成对齐的表格格式文本,适合生成报告或日志。

#juzicode.com/VX公众号:juzicode
import textwrap

data = [
    ("Name", "Age", "City"),
    ("Alice", "30", "New York"),
    ("Bob", "25", "San Francisco")
]

for row in data:
    print(textwrap.fill("\t".join(row), width=30))

运行结果:

Name    Age     City
Alice   30      New York
Bob     25      San Francisco

5. 生成代码注释

生成格式化的代码注释,适合自动生成文档或注释。

#juzicode.com/VX公众号:juzicode
import textwrap

comment = "这是一个非常长的注释,需要按照指定的宽度进行换行,以便更好地展示内容。"
wrapped_comment = textwrap.fill(comment, width=20, initial_indent="# ", subsequent_indent="# ")
print(wrapped_comment)

运行结果:

# 这是一个非常长的注释,需要按照指定的
# 宽度进行换行,以便更好地展示内容。

总结

textwrap 是 Python 中处理文本格式化的利器,其核心优势包括:

  • 简单易用的 API 设计
  • 支持多种文本格式化需求
  • 与标准库无缝集成
  • 适用于多语言文本处理

无论是简单的换行需求,还是复杂的文档生成,textwrap 都能提供高效的解决方案。对于需要频繁处理文本格式的开发者,textwrap 是一个不可或缺的工具。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注