Формат Python 3 csv с выравниванием по левому краю и повторной записью в новый csv

#python-3.x #csv

Вопрос:

У меня есть выровненный CSV

 symbol,latestPrice,changePercent,marketCap,peRatio,week52High,week52Low,ytdChange,companyName
SENS,2.91,0.41951,1245690090,,5.56,0.3497,2.7574315416379904,Senseonics Holdings Inc
RESN,4.07,0.25617,245922111,,8.33,2.09,0.7920190566037737,Resonant Inc
DOCU,233.24,0.19764,45378268496,-178.05,290.23,135.42,0.24685277552856497,DocuSign Inc
JOAN,16.92,0.18987,685586116,,17.01,9.75,0.5710944897959185,JOANN Inc
AMCX,66.8,0.17668,2052849170,12.53,83.63,20.16,1.0441667207156833,AMC Networks Inc - Class A
 

и попробуйте переформатировать их и сохранить в новом формате csv

         with open(out_file, 'w') as csvfile:

        writer = csv.writer(csvfile)

        for row in csv_f:
            print('{:<15}  {:<15}  {:<20} {:<25} '.format(*row))
            writer.writerows('{:<15}  {:<15}  {:<20} {:<25} '.format(*row))
 

на отпечатке видно, что я пытаюсь сделать

                        companyName  latestPrice  ...  week52Low  ytdChange
symbol                                           ...                      
SENS       Senseonics Holdings Inc         2.91  ...     0.3497   2.757432
RESN                  Resonant Inc         4.07  ...     2.0900   0.792019
DOCU                  DocuSign Inc       233.24  ...   135.4200   0.246853
JOAN                     JOANN Inc        16.92  ...     9.7500   0.571094
AMCX    AMC Networks Inc - Class A        66.80  ...    20.1600   1.044167
 

Но форматирование CSV становится таким. вообще не читается

 s
y
m
b
o
l
 
 
 
 
 
 
 
 
 
 
 
l
a
t
e
s
t
P
r
i
c
 

Кто-нибудь может помочь? Спасибо!

Ответ №1:

writer.writerows() принимает коллекцию строк в качестве первого параметра. Поскольку вы передаете строку (набор символов), каждый символ строки обрабатывается как отдельная строка. Используйте writer.writerow() вместо этого.

writer.writerow() , с другой стороны, требуется набор столбцов. Обязательно передайте ему список столбцов, а не одну строку, как в writer.writerow([your_string]) .

Комментарии:

1. Спасибо. Использовал writer.writerow() здесь,и выходной csv выглядит лучше, но все равно выглядит очень странно. s,y,m,b,o,l, вместо ожидаемого формата в печати, который есть symbol . Не могли бы вы просветить меня?