Jestem całkiem nowy w Pythonie i teraz mam problem z ładnym sformatowaniem moich danych do wydruku.
Mam jedną listę, która jest używana dla dwóch nagłówków i macierz, która powinna być zawartością tabeli. Tak jak:
teams_list = ["Man Utd", "Man City", "T Hotspur"]
data = np.array([[1, 2, 1],
[0, 1, 0],
[2, 4, 2]])
Zauważ, że nazwy nagłówków niekoniecznie mają taką samą długość. Wszystkie dane są jednak liczbami całkowitymi.
Teraz chcę to przedstawić w formie tabeli, coś takiego:
Man Utd Man City T Hotspur
Man Utd 1 0 0
Man City 1 1 0
T Hotspur 0 1 2
Mam przeczucie, że do tego musi istnieć struktura danych, ale nie mogę jej znaleźć. Próbowałem używać słownika i formatować drukowanie, próbowałem pętli for z wcięciem i próbowałem drukować jako ciągi znaków.
Jestem pewien, że musi istnieć bardzo prosty sposób, ale prawdopodobnie brakuje mi tego z powodu braku doświadczenia.
Odpowiedzi:
Niektóre ad-hoc kodu dla Python 2.7:
To zależy
str.format()
, a Format Specyfikacja Mini-Language .źródło
Istnieje kilka lekkich i przydatnych pakietów Pythona do tego celu:
1. tabulatura : https://pypi.python.org/pypi/tabulate
W tabeli znajduje się wiele opcji określających nagłówki i format tabeli.
2. PrettyTable : https://pypi.python.org/pypi/PrettyTable
PrettyTable ma opcje odczytu danych z bazy danych csv, html, sql. Możesz także wybrać podzbiór danych, sortować tabelę i zmieniać style tabel.
3. texttable : https://pypi.python.org/pypi/texttable
za pomocą tabeli tekstowej możesz kontrolować wyrównanie w poziomie / pionie, styl obramowania i typy danych.
4. termtables : https://github.com/nschloe/termtables
za pomocą tabeli tekstowej możesz kontrolować wyrównanie w poziomie / pionie, styl obramowania i typy danych.
Inne opcje:
źródło
coalign
słowo kluczowe wyrównania kolumn nie jest obsługiwane w oficjalnej wersji pypi. „tableprint” - średni, złożony interfejs API, niewystarczająca liczba typowych przykładów użycia.źródło
pip install numpy
używa teraz kół binarnych na większości platform (bez kompilacji) . Oczywiście inne opcje instalacji binarnej były dostępne nawet wcześniej.Python sprawia, że jest to dość łatwe.
Coś jak
będzie miał wynik
% W ciągu jest zasadniczo znakiem ucieczki, a następujące po nim znaki mówią Pythonowi, jaki format powinny mieć dane. % Na zewnątrz i po ciągu mówi pythonowi, że zamierzasz użyć poprzedniego ciągu jako ciągu formatu i że następujące dane powinny zostać wprowadzone w określonym formacie.
W tym przypadku użyłem dwukrotnie „% -12i”. Aby rozbić każdą część:
Z dokumentacji: https://docs.python.org/2/library/stdtypes.html#string-formatting
źródło
print('%-20.2f' % position['deg'], '%-17.2f' % position['v2'])
gdzie.2
precyzja określa pływakaf
Aktualizowanie odpowiedzi Svena Marnacha do pracy w Pythonie 3.4:
źródło
Kiedy to robię, lubię mieć kontrolę nad szczegółami formatowania tabeli. W szczególności chcę, aby komórki nagłówka miały inny format niż komórki ciała, a szerokości kolumn tabeli powinny być tak szerokie, jak to konieczne. Oto moje rozwiązanie:
Oto wynik:
źródło
Myślę, że tego właśnie szukasz.
Jest to prosty moduł, który po prostu oblicza maksymalną wymaganą szerokość wpisów w tabeli, a następnie po prostu używa rjust i ljust do wykonania ładnego wydruku danych.
Jeśli chcesz, aby lewy nagłówek był wyrównany, zmień to połączenie:
Z linii 53 z:
źródło
Wiem, że spóźniłem się na przyjęcie, ale właśnie stworzyłem bibliotekę, która moim zdaniem mogłaby naprawdę pomóc. Jest to niezwykle proste, dlatego uważam, że powinieneś go użyć. Nazywa się TableIT .
Podstawowe użycie
Aby z niego skorzystać, najpierw postępuj zgodnie z instrukcjami pobierania na stronie GitHub .
Następnie zaimportuj:
Następnie utwórz listę, w której każda lista wewnętrzna jest rzędem:
Następnie wszystko, co musisz zrobić, to wydrukować:
To jest wynik, który otrzymujesz:
Nazwy pól
Możesz użyć nazw pól, jeśli chcesz ( jeśli nie używasz nazw pól, nie musisz mówić useFieldNames = False, ponieważ jest to ustawione domyślnie ):
Z tego otrzymasz:
Istnieją inne zastosowania, na przykład możesz to zrobić:
Z tego:
Lub możesz zrobić:
I z tego otrzymujesz:
Zabarwienie
Możesz także użyć kolorów.
Kolorów używa się za pomocą opcji koloru ( domyślnie jest ustawiona na Brak ) i określania wartości RGB.
Korzystając z powyższego przykładu:
Otrzymasz wtedy:
Pamiętaj, że drukowanie kolorów może nie działać, ale działa dokładnie tak samo, jak inne biblioteki drukujące kolorowy tekst. Przetestowałem i każdy kolor działa. Niebieski też nie jest pomieszany, tak jak w przypadku domyślnej
34m
sekwencji ucieczki ANSI (jeśli nie wiesz, co to jest, nie ma to znaczenia). W każdym razie wszystko wynika z faktu, że każdy kolor ma wartość RGB, a nie domyślną wartość systemową.Więcej informacji
Aby uzyskać więcej informacji, sprawdź stronę GitHub
źródło
Pure Python 3
Wydrukuje
źródło
Prostym sposobem na to jest zapętlenie wszystkich kolumn, zmierzenie ich szerokości, utworzenie szablonu wiersza dla tej maksymalnej szerokości, a następnie wydrukowanie wierszy. Nie jest to dokładnie to, czego szukasz , ponieważ w tym przypadku musisz najpierw umieścić nagłówki w tabeli, ale myślę, że może być przydatny dla kogoś innego.
Używasz go w ten sposób:
źródło
Poniższa funkcja utworzy żądaną tabelę (z numpy lub bez) z Python 3 (być może również Python 2). Wybrałem ustawienie szerokości każdej kolumny, aby pasowała do najdłuższej nazwy drużyny. Możesz go zmodyfikować, jeśli chcesz użyć długości nazwy zespołu dla każdej kolumny, ale będzie to bardziej skomplikowane.
Uwaga: W przypadku bezpośredniego odpowiednika w Pythonie 2 możesz zastąpić go
zip
zizip
itertools.Spowoduje to utworzenie następującej tabeli:
Jeśli chcesz mieć pionowych separatorów, można zastąpić
" ".join
z" | ".join
.Bibliografia:
źródło
Spróbowałbym przejrzeć listę i użyć formatera CSV do przedstawienia danych, które chcesz.
Jako separator możesz określić tabulatory, przecinki lub dowolny inny znak.
W przeciwnym razie po prostu przewiń listę i wypisz „\ t” po każdym elemencie
http://docs.python.org/library/csv.html
źródło
Znalazłem to, szukając sposobu na wyprowadzenie prostych kolumn. Jeśli potrzebujesz tylko bezproblemowych kolumn , możesz użyć tego:
EDYCJA: Starałem się być tak prosty, jak to możliwe, i tym samym zrobiłem kilka rzeczy ręcznie zamiast korzystać z listy drużyn. Aby uogólnić na aktualne pytanie PO:
Ouputs:
Ale nie wydaje się to już prostsze niż inne odpowiedzi, z tą korzyścią, że nie wymaga już żadnego importu. Ale odpowiedź @ campkeith już to spełniła i jest bardziej niezawodna, ponieważ może obsługiwać szerszy zakres długości etykiet.
źródło