Je suis assez nouveau sur Python et j'ai maintenant du mal à bien formater mes données pour la sortie imprimée.
J'ai une liste qui est utilisée pour deux titres et une matrice qui devrait être le contenu du tableau. Ainsi:
teams_list = ["Man Utd", "Man City", "T Hotspur"]
data = np.array([[1, 2, 1],
[0, 1, 0],
[2, 4, 2]])
Notez que les noms de titres ne sont pas nécessairement de mêmes longueurs. Les entrées de données sont cependant toutes des entiers.
Maintenant, je veux représenter cela sous forme de tableau, quelque chose comme ceci:
Man Utd Man City T Hotspur
Man Utd 1 0 0
Man City 1 1 0
T Hotspur 0 1 2
J'ai le pressentiment qu'il doit y avoir une structure de données pour cela, mais je ne la trouve pas. J'ai essayé d'utiliser un dictionnaire et de formater l'impression, j'ai essayé les boucles for avec indentation et j'ai essayé d'imprimer en tant que chaînes.
Je suis sûr qu'il doit y avoir un moyen très simple de le faire, mais je le manque probablement par manque d'expérience.
Réponses:
Du code ad hoc pour Python 2.7:
Cela s'appuie sur
str.format()
le mini-langage de spécification de format .la source
Il existe des packages python légers et utiles à cet effet:
1. tabuler : https://pypi.python.org/pypi/tabulate
tabulate a de nombreuses options pour spécifier les en-têtes et le format du tableau.
2. PrettyTable : https://pypi.python.org/pypi/PrettyTable
PrettyTable a des options pour lire les données de la base de données csv, html, sql. Vous pouvez également sélectionner un sous-ensemble de données, trier le tableau et modifier les styles de tableau.
3. table de texte : https://pypi.python.org/pypi/texttable
avec table de texte, vous pouvez contrôler l'alignement horizontal / vertical, le style de bordure et les types de données.
4. tables terminales : https://github.com/nschloe/termtables
avec table de texte, vous pouvez contrôler l'alignement horizontal / vertical, le style de bordure et les types de données.
Autres options:
la source
coalign
mot clé d' alignement des colonnes n'est pas pris en charge dans la version officielle de pypi. "tableprint" - moyenne, complexe API, pas assez d'exemples d'utilisation courants.la source
pip install numpy
utilise désormais les roues binaires sur la plupart des plateformes (pas de compilation) . Évidemment, d'autres options d'installation binaires étaient disponibles avant cela.Python rend cela assez simple.
Quelque chose comme
aura la sortie
Le% dans la chaîne est essentiellement un caractère d'échappement et les caractères qui suivent indiquent à python le type de format que les données doivent avoir. Le% à l'extérieur et après la chaîne indique à python que vous avez l'intention d'utiliser la chaîne précédente comme chaîne de format et que les données suivantes doivent être mises au format spécifié.
Dans ce cas, j'ai utilisé "% -12i" deux fois. Pour décomposer chaque partie:
Depuis les documents: https://docs.python.org/2/library/stdtypes.html#string-formatting
la source
print('%-20.2f' % position['deg'], '%-17.2f' % position['v2'])
où la.2
précision spécifiée du flotteurf
Mise à jour de la réponse de Sven Marnach pour fonctionner en Python 3.4:
la source
Lorsque je fais cela, j'aime avoir un certain contrôle sur les détails de la mise en forme du tableau. En particulier, je souhaite que les cellules d'en-tête aient un format différent de celui des cellules de corps, et que les largeurs des colonnes du tableau soient aussi larges que chacune doit l'être. Voici ma solution:
Voici la sortie:
la source
Je pense que ça que vous recherchez.
C'est un module simple qui calcule simplement la largeur maximale requise pour les entrées de table, puis utilise simplement rjust et ljust pour faire une jolie impression des données.
Si vous voulez que votre cap gauche soit aligné à droite, changez simplement cet appel:
De la ligne 53 avec:
la source
Je sais que je suis en retard à la fête, mais je viens de créer une bibliothèque pour cela qui, je pense, pourrait vraiment aider. C'est extrêmement simple, c'est pourquoi je pense que vous devriez l'utiliser. Il s'appelle TableIT .
Utilisation basique
Pour l'utiliser, suivez d'abord les instructions de téléchargement sur la page GitHub .
Importez-le ensuite:
Faites ensuite une liste de listes où chaque liste intérieure est une ligne:
Il ne vous reste plus qu'à l'imprimer:
Voici la sortie que vous obtenez:
Noms des champs
Vous pouvez utiliser des noms de champs si vous le souhaitez ( si vous n'utilisez pas de noms de champs, vous n'avez pas à dire useFieldNames = False car il est défini sur celui par défaut ):
De cela, vous obtiendrez:
Il existe d'autres utilisations, par exemple, vous pouvez le faire:
À partir de ce:
Ou vous pourriez faire:
Et à partir de cela, vous obtenez:
Couleurs
Vous pouvez également utiliser des couleurs.
Vous utilisez les couleurs en utilisant l'option couleur ( par défaut, elle est définie sur Aucune ) et en spécifiant les valeurs RVB.
En utilisant l'exemple ci-dessus:
Vous obtiendrez alors:
Veuillez noter que l'impression des couleurs peut ne pas fonctionner pour vous, mais cela fonctionne exactement de la même manière que les autres bibliothèques qui impriment du texte en couleur. J'ai testé et chaque couleur fonctionne. Le bleu n'est pas gâché non plus comme il le ferait si vous utilisez la valeur par défaut
34m
séquence d'échappement ANSI (si vous ne savez pas ce que c'est, peu importe). Quoi qu'il en soit, tout cela vient du fait que chaque couleur est une valeur RVB plutôt qu'une valeur par défaut du système.Plus d'informations
Pour plus d'informations, consultez la page GitHub
la source
Pure Python 3
Imprime
la source
Un moyen simple de le faire consiste à parcourir toutes les colonnes, à mesurer leur largeur, à créer un modèle de ligne pour cette largeur maximale, puis à imprimer les lignes. Ce n'est pas exactement ce que vous recherchez , car dans ce cas, vous devez d'abord mettre vos titres dans le tableau, mais je pense que cela pourrait être utile à quelqu'un d'autre.
Vous l'utilisez comme ceci:
la source
La fonction suivante créera la table demandée (avec ou sans numpy) avec Python 3 (peut-être aussi Python 2). J'ai choisi de définir la largeur de chaque colonne pour qu'elle corresponde à celle du plus long nom d'équipe. Vous pouvez le modifier si vous souhaitez utiliser la longueur du nom de l'équipe pour chaque colonne, mais ce sera plus compliqué.
Remarque: Pour un équivalent direct dans Python 2, vous pouvez remplacer le
zip
parizip
de itertools.Cela produira le tableau suivant:
Si vous souhaitez avoir des séparateurs de lignes verticales, vous pouvez les remplacer
" ".join
par" | ".join
.Références:
la source
J'essaierais de parcourir la liste et d'utiliser un formateur CSV pour représenter les données que vous souhaitez.
Vous pouvez spécifier des tabulations, des virgules ou tout autre caractère comme délimiteur.
Sinon, parcourez simplement la liste et imprimez "\ t" après chaque élément
http://docs.python.org/library/csv.html
la source
J'ai trouvé cela juste à la recherche d'un moyen de produire des colonnes simples. Si vous avez juste besoin de colonnes sans tracas , vous pouvez utiliser ceci:
EDIT: J'essayais d'être aussi simple que possible, et j'ai donc fait certaines choses manuellement au lieu d'utiliser la liste des équipes. Pour généraliser à la question réelle du PO:
Sortie:
Mais cela ne semble plus plus simple que les autres réponses, avec peut-être l'avantage qu'il ne nécessite plus d'importations. Mais la réponse de @ campkeith l'a déjà rencontré et est plus robuste car elle peut gérer une plus grande variété de longueurs d'étiquettes.
la source