[Tutor] Re: How can I format rows of irregular sized strings to print in columns?

John Matthews jmatthews at mcb-inc.com
Fri May 7 09:57:59 EDT 2004


<stuff snipped; I hate Outlook>

At 07:43 PM 5/6/2004, Bob Gailer wrote:

At 04:31 PM 5/6/2004, Lee Harr wrote:

I wrote a little program to look for graphics files and tell me the image
size and the file size of each file. The data prints out like this:

(292, 240) 35638 defender.bmp
(1024, 768) 2359350 evolution3.bmp
(78, 76) 17990 GRID1A.bmp

How can I make it so that it looks more like this:

( 292,  240)    35,638  defender.bmp
(1024,  768) 2,359,350  evolution3.bmp
(  78,   76)    17,990  GRID1A.bmp

Please post only in plain text.

You will want to look at the string formatting operator:
http://docs.python.org/lib/typesseq-strings.html

One handy example:


a='(292, 240)';b=35638; c='defender.bmp'
print '%10s %10s %20s' % (a, b, c)
(292, 240)      35638         defender.bmp

This solution is close, but I think the OP wants the numbers in () to be
individually aligned in columns. The desired output in proportional font
doesn't show this, but if you copy/paste into a fixed font editor you will
see this more clearly.

OOPS. I have now done my "homework" and realize that im.size returns a tuple
of numbers rather than a string. So we don't need re after all. The solution
now is 

    print '(%4s, %4s)' % imagesize, '%10s' % os.path.getsize(bmpfiles[-1]),
'%12s' % bmpfiles[-1] 


[snip]
 
And now for some code refinement:

bmpfiles.reverse() 
while len(bmpfiles)>0: 
    im=Image.open(bmpfiles[-1]) 
    imagesize=im.size    
    print '(%4s, %4s)' % imagesize, '%10s' % os.path.getsize(bmpfiles[-1]),
'%12s' % bmpfiles[-1] 
    bmpfiles.pop() 

Can be simplified using a for loop:

for bmpfile in bmpfiles:
    im=Image.open(bmpfile) 
    imagesize=im.size    
    print '(%4s, %4s)' % imagesize, '%10s' % os.path.getsize(bmpfiles[-1]),
'%12s' % bmpfiles[-1] 

Bob Gailer
bgailer at alum.rpi.edu
303 442 2625 home
720 938 2625 cell


Thanks Bob, this is exactly what I was looking for!

To the others that provided input, thankyou too! 

--
John Matthews
McDonald, Cassell & Bassett, Inc.
600 West Spring Street
Columbus, Ohio 43215
(614) 628-0630
(614) 628-0633 Fax
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.python.org/pipermail/tutor/attachments/20040507/6081f9f9/attachment-0001.html


More information about the Tutor mailing list