段落的Python字符串格式化程序

Pet*_*org 4 python string formatting

我正在尝试在命令行,报告样式上为输出格式化一些字符串,并且我正在寻找格式化字符串的最简单方法,以便我可以获得自动段落格式.

在perlform格式化是通过"格式"功能完成的

format Something =
    Test: @<<<<<<<< @||||| @>>>>>
            $str,     $%,    '$' . int($num)
.

$str = "widget";
$num = $cost/$quantity;
$~ = 'Something';
write;
Run Code Online (Sandbox Code Playgroud)

perlform的变化允许文本被干净地包裹,对于帮助屏幕,日志报告等是有用的.

是否有python等价物?或者我可以用Python的新字符串格式函数编写一个合理的hack ?

示例输出我想:

Foobar-Title    Blob
  0123          This is some long text which would wrap
                past the 80 column mark and go onto the
                next line number of times blah blah blah.
  hi there      dito
  something     more text here. more text here. more text
                here.
Run Code Online (Sandbox Code Playgroud)

ken*_*ytm 5

没有像Python内置的自动格式化.(.format 函数语法来自C#.)毕竟,Perl是"实用提取和报告语言",Python不是为格式化报告而设计的.

您的输出可以通过textwrap模块完成,例如

from textwrap import fill
def formatItem(left, right):
   wrapped = fill(right, width=41, subsequent_indent=' '*15)
   return '  {0:<13}{1}'.format(left, wrapped)

...

>>> print(formatItem('0123', 'This is some long text which would wrap past the 80 column mark and go onto the next line number of times blah blah blah.'))
  0123         This is some long text which would wrap
               past the 80 column mark
               and go onto the next line
               number of times blah blah
               blah.
Run Code Online (Sandbox Code Playgroud)

请注意,这假定"左"不跨越1行.更通用的解决方案是

from textwrap import wrap
from itertools import zip_longest
def twoColumn(left, right, leftWidth=13, rightWidth=41, indent=2, separation=2):
    lefts = wrap(left, width=leftWidth)
    rights = wrap(right, width=rightWidth)
    results = []
    for l, r in zip_longest(lefts, rights, fillvalue=''):
       results.append('{0:{1}}{2:{5}}{0:{3}}{4}'.format('', indent, l, separation, r, leftWidth))
    return "\n".join(results)

>>> print(twoColumn("I'm trying to format some strings for output on the command-line", "report style, and am looking for the easiest method to format a string such that I can get automatic paragraph formatting."))
  I'm trying to  report style, and am looking for the
  format some    easiest method to format a string such
  strings for    that I can get automatic paragraph
  output on the  formatting.
  command-line   
Run Code Online (Sandbox Code Playgroud)