"Dave Borne" <[EMAIL PROTECTED]> wrote in news:[EMAIL PROTECTED]:
> Thanks, Paul. I didn't know about textwrap, that's neat. > > Leon, > so in my example change >> data1= [testdata[x:x+colwidth] for x in >> range(0,len(testdata),colwidth)] > to >> data1 = textwrap.wrap(testdata,colwidth) >> data1 = [x.ljust(colwidth) for x in data1] > > oh and I made a mistake that double spaces it. the "print '\n'" > line needs to be either > print '' > or > print '\n', > (with a comma) > The solutions so far serve up text that is split within the confines of the column width, but leave a "ragged right" margin, where the line lengths appear to differ. I had the impression that the OP wanted right-and-left justified text, such as would typically be found in a newspaper column. Here's a shot at doing that for fixed-width fonts. To use it, first split your lines as others have suggested, then print aline(line,colwid) for each line in your data. # aline - align text to fit in specified width # This module arbitrarily chooses to operate only on long-enough # lines, where "long-enough" is defined as 60% of the specified # width in this case. # def aline(line, wid): line = line.strip() lnlen = len(line) if wid > lnlen > wid*0.6: ls = line.split() diff = wid - lnlen #nspaces = len(ls)-1 eix = 1 bix = 1 while diff > 0: # and nspaces > 0: if len(ls[bix]) == 0 or ls[bix].find(' ') >= 0: ls[bix] += ' ' else: ls.insert(bix,'') diff -= 1 bix += 2 if bix >= 1+len(ls)/2: bix = 1 if diff > 0: if len(ls[-eix]) == 0 or ls[-eix].find(' ') >= 0: ls[-eix] += ' ' else: ls.insert(-eix,'') diff -= 1 eix += 2 if eix >= 1+len(ls)/2: eix = 1 line = ' '.join(ls) return line -- rzed -- http://mail.python.org/mailman/listinfo/python-list