2016-08-27 34 views
7

Tworzę bardzo prymitywny program "Książka adresowa" w Pythonie. Jestem zgrywania danych kontaktowych z pliku CSV, których treść wygląda jak na poniższym przykładzie:Formatowanie pliku CSV w Pythonie

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

próbuję sformatować wyjście tak, że wygląda bardziej przejrzysty i czytelny, czyli wszystko ustawieni w rzędach i kolumny, na przykład:

Name:  Phone:  Company:  Email:   
Elon Musk 454-6723  SpaceX   [email protected] 

Mój bieżący kod wygląda następująco:

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

które w naturalny sposób z powodu braku formatowania, produkuje to, co wciąż wygląda bardzo nieczyste.

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

Wszelkie wskazówki dotyczące sposobu uzyskania czystszego wyjście byłoby bardzo mile widziane, ponieważ jestem początkujący i znajdę wszystko to dość kłopotliwe. Z góry bardzo dziękuję.

Odpowiedz

6

Możesz użyć format do lewej strony, aby uzasadnić swoje wyniki. Na przykład,

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

wyjściowa:

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

Można przeczytać więcej o format here. Symbol < wyrównuje do lewej strony tekstu, a liczba określa szerokość ciągu. Każdy {} może zawierać argument pozycyjny przed dwukropkiem : - jeśli zostaną pominięte, łańcuchy pojawią się w kolejności argumentów na rozpakowanej liście row.

+1

Wielkie dzięki za informacje i link. – shaneybrainy13

+0

@zarak Wypróbowałem twoje rozwiązanie, ale ciągle dostaję IndexError: indeks krotek poza zakresem jakieś pomysły na rozwiązanie? – Vash

+0

Hi @Vash, Czy uruchomiłeś kod w pokazanym tutaj przykładzie? – zarak