Форматирование вывода CSV-файла в Python

Я создаю очень рудиментарную программу "адресная книга" в Python. Я хватаю контактные данные из файла CSV, содержимое которого выглядит следующим образом:

Name,Phone,Company,Email
Elon Musk,454-6723,SpaceX,emusk@spacex.com
Larry Page,853-0653,Google,lpage@gmail.com
Tim Cook,133-0419,Apple,tcook@apple.com
Steve Ballmer,456-7893,Developers!,sballmer@bluescreen.com

Я пытаюсь отформатировать вывод так, чтобы он выглядел чище и читабельнее, т. е. все выстроилось в строки и столбцы, как это:

Name:        Phone:        Company:        Email:        
Elon Musk    454-6723      SpaceX          emusk@spacex.com

мой текущий код выглядит следующим образом:

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

который, естественно, из-за отсутствия форматирования, производит это, что еще выглядит очень грязным.

['Name', 'Phone', 'Company', 'Email']
['Elon Musk', '454-6723', 'SpaceX', 'emusk@spacex.com']
['Larry Page', '853-0653', 'Google', 'lpage@gmail.com']
['Tim Cook', '133-0419', 'Apple', 'tcook@apple.com']
['Steve Ballmer', '456-7893', 'Developers!', 'sballmer@bluescreen.com']

любые советы о том, как произвести более чистый выход, были бы очень признательны, так как я новичок, и я нахожу все это довольно запутанным. Большое спасибо заранее.

1 ответов


можно использовать format влево, чтобы оправдать ваш выход. Например,

f = open("contactlist.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               emusk@spacex.com         
Larry Page       853-0653         Google               lpage@gmail.com          
Tim Cook         133-0419         Apple                tcook@apple.com          
Steve Ballmer    456-7893         Developers!          sballmer@bluescreen.com  

вы можете прочитать больше о здесь. The < символ выравнивает текст слева, а число указывает ширину строки. Каждый {} может включать позиционный аргумент перед двоеточием : - если они опущены, строки будут отображаться в порядке аргументов в распакованном списке row.