+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2020-03(49)

2020-04(67)

2020-05(28)

2020-06(46)

2020-07(42)

python标准库之文本系列 -- 格式化文本段落的textwrap模块

发布于2020-04-26 11:47     阅读(369)     评论(0)     点赞(1)     收藏(4)


0

1

2

3

4

    如果想美观打印(pretty-printing),该模块会提供很多文本编辑器和文字处理器都有的段落自动换行或填充特性。

  格式化一个段落,不可避免的要对宽度,缩进,填充等方面做一些操作。在操作文本的时候应当把这三个方面结合起来。

    textwrap.fill(text,width=70.**kwargs)

  参数说明:

text:输入的文本段落

width:默认的宽度

**kwargs:允许多个映射类型的参数(a = ?? ...)

 在最后我会举个例子来体现**kwargs的参数,从中可以感知到python的多态性。 

  fill()函数相当与格式化字符串的宽度规范。

  textwrap.dedent(text)  -- 去除现有缩进

  textwrap.indent(text,prefix,predicate=None) -- 缩进

该缩进函数可以为一个字符串的所有行增加一致的前缀文本。下面举个例子,你可以在自己的python编辑器中实际操作一下。

  

  1. #不改变predicate参数的默认行为
  2. #为每一行增加前缀
  3. import textwrap
  4. from textwrap_example import sample_text
  5. dedented = textwrap.dedent(sample_text) #去除现有的缩进
  6. wrapped = textwrap.fill(sample_text,width=50) #规范宽度
  7. #为每一行增加前缀
  8. final = textwrap.indent(wrapped,">") #增加前缀">"
  9. print(final)

很简单吧。但是下面才是重点,我们已经可以为文本的每一行增加一个前缀,但是,当我们向要把前缀加在符合条件的行。该怎么办呢?接下来就需要predicate参数的重赋值。

  1. #筛选出符合条件的行,需要定义一个筛选函数
  2. #可以为predicate参数传入一个callable对象
  3. import textwrap
  4. from textwrap_example import sample_text
  5. #定义一个筛选函数
  6. def should_indent(line):
  7. print("Indent {!r}?".format(line)) #打印每行的判断的文本
  8. return len(line.strip()) % 2 == 0 #判断每行的长度是否被2整除
  9. dedented_text = textwrap.dedent(sample_text)
  10. wrapped = textwrap.fill(dedented_text,width=50)
  11. final = textwrap.indent(wrpped,"EVEN",predicate=should_indent) #符合条件的行增加前缀"EVEN"
  12. print('\nQuoted block:\n')
  13. print(final)

  好了,基本的textwrap模块函数就有这几个,该有几个没列出,最后再说说首行缩进:

  1. import textwrap
  2. from textwrap_example import sample_text
  3. dedented = textwrap.dedent(sample_text).strip()
  4. print(textwrap.fill(dedented_text,initial_indent='',subsquence_indent=' ' * 4,width=50,))

 

0

1

2

3

4

5

6

7



所属网站分类: 技术文章 > 博客

作者:天青色等烟雨

链接: https://www.pythonheidong.com/blog/article/344215/6edf41843743c6ab608b/

来源: python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

1 0
收藏该文
已收藏

评论内容:(最多支持255个字符)