shaneybrainy13 shaneybrainy13 - 1 year ago 70
Python Question

Formatting output of CSV file in Python

I am creating a very rudimentary "Address Book" program in Python. I am grabbing contact data from a CSV file, the contents of which looks like the following example:

Elon Musk,454-6723,SpaceX,
Larry Page,853-0653,Google,
Tim Cook,133-0419,Apple,
Steve Ballmer,456-7893,Developers!,

I am trying to format the output so that it looks cleaner and more readable, i.e. everything lined up in rows and columns, like this:

Name: Phone: Company: Email:
Elon Musk 454-6723 SpaceX

My current code is as follows:

f = open("contactlist.csv")
csv_f = csv.reader(f)
for row in csv_f:

Which naturally due to lack of formatting, produces this, which still looks very unclean.

['Name', 'Phone', 'Company', 'Email']
['Elon Musk', '454-6723', 'SpaceX', '']
['Larry Page', '853-0653', 'Google', '']
['Tim Cook', '133-0419', 'Apple', '']
['Steve Ballmer', '456-7893', 'Developers!', '']

Any tips on how to produce a cleaner output would be greatly appreciated, as I am beginner and I find all of this quite confusing. Many thanks in advance.

Answer Source

You could use format to left justify your output. For example,

f = open("soq.csv")
csv_f = csv.reader(f)
for row in csv_f:
    print('{:<15}  {:<15}  {:<20} {:<25}'.format(*row))


Name             Phone            Company              Email                    
Elon Musk        454-6723         SpaceX              
Larry Page       853-0653         Google               
Tim Cook         133-0419         Apple                
Steve Ballmer    456-7893         Developers!  

You can read more about format here. The < symbol left-aligns the text, and the number specifies the width of the string. Each {} can include a positional argument before the colon : - if they are omitted, the strings will appear in the order of the arguments in the unpacked list row.