📜  使用Python在Linux Terminal中格式化文本

📅  最后修改于: 2020-05-09 11:33:30             🧑  作者: Mango

本文演示了如何使用Python编程语言在Linux终端中打印格式化的文本 。

与纯文本相反, 格式化文本 (也称为样式文本RTF文本 )具有样式信息,例如:

  • 颜色(文字颜色,背景颜色),
  • 样式(粗体或斜体),
  • 以及其他一些特殊功能,例如删除线文本,带下划线的文本,超链接等。

在Linux终端中, ANSI转义码(或转义序列)用于控制格式,颜色和其他输出选项。
为了对该格式设置信息进行编码,某些字节序列被嵌入到文本中 ,终端会查找并解释为命令并执行它们。
让我们看一个通过简单的Python打印语句打印格式化文本的基本示例!

 print ( '\x1b[3;31;43m' + 'Hello world!' + '\x1b[0m' )

如果在Linux Terminal上运行此代码,则将获得如下输出:

如您所见,输出具有:

  • 文字颜色(前景色):红色
  • 背景颜色:黄色
  • 文字样式:斜体

现在,让我们尝试理解上述print语句中使用的ANSI转义代码的含义。

  • 使用的第一个ANSI转义代码是:
    \x1b[3;31;43m

    该代码的一般语法为:

    \x1b[A;B;C
  • 这里,
    • A :文本格式样式。 取值范围是1到9。
      样式
      1个 粗体
      2 faint
      3 斜体
      4 underline
      5 blinking
      6 快速闪烁
      7 相反
      8 隐藏
      9 删除线
    • B :文字颜色或前景色。 它可以采用30-37之间的任何值。
    • C :背景色。 它可以采用40-47之间的任何值。
      B(用于文字) C(用于背景) 颜色
      30 40 黑色
      31 41 红色
      32 42 绿色
      33 43 黄色
      34 44 蓝色
      35 45 品红
      36 46 青色
      37 47 白色
  • 最后,我们使用以下ANSI转义代码: 
    \x1b[0m

    这是用于将颜色/样式更改重置为默认值的代码。

现在,我们用Python创建一个类来系统地实现所需的格式!

# 用于在终端上打印格式化文本的Python类定义。
 # 像这样初始化TextFormatter对象:
 # >>> cprint = TextFormatter()
 #
 # 使用.cfg方法配置格式样式:
 # >>> cprint.cfg('r', 'y', 'i')
 # Argument 1: 前景(文字)颜色
 # Argument 2: 背景颜色
 # Argument 3: 文字样式
 #
 # 使用.out方法打印格式化的文本:
 # >>> cprint.out("Hello, world!")
 #
 # 使用.reset方法重置为默认设置:
 # >>> cprint.reset()
  class TextFormatter:
      COLORCODE = {
          'k' : 0 , # black
          'r' : 1 , # red
          'g' : 2 , # green
          'y' : 3 , # yellow
          'b' : 4 , # blue
          'm' : 5 , # magenta
          'c' : 6 , # cyan
          'w' : 7 # white
     }
      FORMATCODE = {
          'b' : 1 , # bold
          'f' : 2 , # faint
          'i' : 3 , # italic
          'u' : 4 , # underline
          'x' : 5 , # blinking
          'y' : 6 , # fast blinking
          'r' : 7 , # reverse
          'h' : 8 , # hide
          's' : 9 , # strikethrough
     }
     # 建设者
      def __init__( self ):
          self .reset()
     # 重置属性的功能
      def reset( self ):
         #属性作为字典
          self .prop = { 'st' : None , 'fg' : None , 'bg' : None }
          return self
     # 用于配置属性的函数
      def cfg( self , fg, bg = None , st = None ):
         # 重置并设置所有属性
          return self .reset().st(st).fg(fg).bg(bg)
     # 设定文字样式
      def st( self , st):
          if st in self .FORMATCODE.keys():
              self .prop[ 'st' ] = self .FORMATCODE[st]
          return self
     # 设置前景色
      def fg( self , fg):
          if fg in self .COLORCODE.keys():
              self .prop[ 'fg' ] = 30 + self .COLORCODE[fg]
          return self
     # 设置背景色
      def bg( self ,bg):
          if bg in self .COLORCODE.keys():
              self .prop[ 'bg' ] = 40 + self .COLORCODE[bg]
          return self
     # 格式化函数
      def format ( self , string):
          w = [ self .prop[ 'st' ], self .prop[ 'fg' ], self .prop[ 'bg' ]]
          w = [ if x not for w x is str (x)
         # 返回格式化的字符串
          return '\x1b[%sm%s\x1b[0m' % ( ';' .join(w), string)
     # 输出格式化的字符串
      def out( self , string):
          print ( self . format (string))

这是我们的文本格式化程序的类定义。
为了使用它,请将上面的Python脚本另存为TextFormatter.py,并在存储此文件的同一文件夹中打开终端。
然后,通过终端运行Python解释器并导入TextFormatter 。

这里,

  • 我们使用以下命令从TextFormatter模块导入TextFormatter类: 
    from TextFormatter import TextFormatter

     

  • 然后,使用以下命令创建TextFormatter类的对象: 
    cprint = TextFormatter()

     

  • 使用cprint.cfg方法配置文本格式。 在这里,参数1为文本颜色,参数2为背景颜色,参数3为文本样式。 
    cprint.cfg('y', 'g', 'b')

     

  • 现在,只需使用cprint.out方法打印任何语句,如下所示: 
    cprint.out("Hello, world!")

     

因此,现在,您可以轻松地在终端上打印样式化的文本!