Python line formatting for paragraphs

I am trying to format some lines for output on the command line, report style, and I am looking for the easiest way to format the line so that I can automatically format the paragraphs.

In perlform, formatting is done using the "format" function

format Something = Test: @<<<<<<<< @||||| @>>>>> $str, $%, '$' . int($num) . $str = "widget"; $num = $cost/$quantity; $~ = 'Something'; write; 

Variations of perlform allow texts to be wrapped cleanly, useful for help screens, journal reports, etc.

Is there a python equivalent? Or a reasonable hack that I could write using a new line of Python format function?

An example of the output I would like:

 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. 
+4
source share
3 answers

Python does not have automatic formatting. (The .format syntax .format borrowed from C #.) In the end, Perl was "Practical Extraction and Report Language", and Python was not designed to format reports.

Your output can be done using the textwrap module, for example

 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. 

Note that this assumes that the โ€œleftโ€ does not span more than one line. A more general solution would be

 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 
+5
source
 import textwrap import itertools def formatter(format_str,widths,*columns): ''' format_str describes the format of the report. {row[i]} is replaced by data from the ith element of columns. widths is expected to be a list of integers. {width[i]} is replaced by the ith element of the list widths. All the power of Python string format spec is available for you to use in format_str. You can use it to define fill characters, alignment, width, type, etc. formatter takes an arbitrary number of arguments. Every argument after format_str and widths should be a list of strings. Each list contains the data for one column of the report. formatter returns the report as one big string. ''' result=[] for row in zip(*columns): lines=[textwrap.wrap(elt, width=num) for elt,num in zip(row,widths)] for line in itertools.izip_longest(*lines,fillvalue=''): result.append(format_str.format(width=widths,row=line)) return '\n'.join(result) 

For instance:

 widths=[17,41] form='{row[0]:<{width[0]}} {row[1]:<{width[1]}}' titles=['Foobar-Title','0123','hi there','something'] blobs=['Blob','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.','dito','more text here. more text here. more text here.'] print(formatter(form,widths,titles,blobs)) 

gives

 # 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. 

formatter can accept any number of columns.

+4
source

There is this from python docs and this that can help.

+1
source

Source: https://habr.com/ru/post/1313556/


All Articles