Python: CSV écrire en colonne plutôt qu'ligne
J'ai un script python qui génère un tas de données dans une boucle while. J'ai besoin d'écrire ces données dans un fichier CSV, afin qu'il écrit par la colonne plutôt que de ligne.
Par exemple dans la boucle 1 de mon script je générer:
(1, 2, 3, 4)
Ai besoin de réfléchir dans mon csv script comme ceci:
Result_1 1
Result_2 2
Result_3 3
Result_4 4
Sur mon deuxième boucle je générer:
(5, 6, 7, 8)
J'ai besoin de ce regarder dans mon fichier csv comme suit:
Result_1 1 5
Result_2 2 6
Result_3 3 7
Result_4 4 8
et ainsi de suite jusqu'à ce que la boucle while se termine. Quelqu'un peut-il m'aider?
MODIFIER
La boucle while peut durer plus de 100 000 boucles
- Le nombre de colonnes?
- "la boucle "while", "la boucle 1", "second tour" -- tous assez vague. Le nombre de lignes dans le fichier de sortie? Le nombre de colonnes dans le fichier de sortie?
Vous devez vous connecter pour publier un commentaire.
La raison
csv
ne supporte pas c'est parce que la variable longueur des lignes ne sont pas vraiment pris en charge sur la plupart des systèmes de fichiers. Ce que vous devez faire à la place est de recueillir toutes les données dans des listes, puis d'appelerzip()
sur eux pour les transposer après.C'est assez simple, si votre but est juste d'écrire la sortie de la colonne par colonne.
Si votre article est une liste:
La mise à jour des lignes dans un fichier n'est pas pris en charge sur la plupart des système de fichiers (une ligne dans un fichier est juste quelques données qui se termine par un saut de ligne, la ligne suivante démarrer juste après que).
Comme je le vois, vous avez deux options:
Petit exemple pour la première méthode:
Cette impression sera
même si
count
générer une suite infinie de nombresce sujet
Result_*
il y a également généré dans la boucle (car je ne pense pas qu'il est possible d'ajouter dans le fichier csv)je vais aller comme ça ; générer toutes les données à une rotation de la matrice d'écrire dans le fichier:
Supposons que (1) vous n'avez pas une grande mémoire (2), vous disposez d'en-têtes de ligne dans une liste (3) toutes les valeurs de données sont des flotteurs; si ils sont tous les entiers jusqu'à 32 - ou 64-bits de valeur, c'est encore mieux.
Sur un 32 bits Python, le stockage d'un flotteur dans une liste prend 16 octets pour l'objet float et 4 octets pour un pointeur dans la liste; au total 20. Le stockage d'un flotteur dans un tableau.array('d') ne prend que 8 octets. De plus en plus spectaculaires de l'épargne est disponible que si toutes vos données sont de type int (les négatifs?) à 8, 4, 2 ou 1 octet(s) - en particulier lors d'une récente Python où tous les entiers sont longs.
Le pseudo-code suivant suppose flotteurs stockés dans le tableau.array('d'). Dans le cas où vous n'avez pas vraiment un problème de mémoire, vous pouvez toujours utiliser cette méthode; j'y ai mis des commentaires pour indiquer les changements nécessaires si vous souhaitez utiliser une liste.
Le lire en ligne, puis le transposer dans la ligne de commande. Si vous utilisez Unix, installer csvtool et suivez les instructions: https://unix.stackexchange.com/a/314482/186237
Comme un autre en streaming approche:
Les deux étapes doit gérer la cuisson à la vapeur juste fine.
Pièges: