2 votes

Enregistrer des listes en python en tant que fichier texte délimité par des points-virgules

J'ai trois listes en Python. Je veux enregistrer ces listes dans un fichier texte délimité par des points-virgules (avec un en-tête).

Par exemple, considérons ces trois listes :

l1 = ['a1', 'a2', 'a3', 'a4', 'a5']
l2 = [1,2,3,4,5]
l3 = [20.0, 25.1, 51.2, 60.2, 75.0]

et l'en-tête, ['Label1', 'Label2', 'Label3']

Je veux enregistrer ces listes comme des colonnes dans un fichier texte sous la forme suivante :

Label1; Label2; Label3
a1;1;20.0%
a2;2;25.1%
a3;3;51.2%
a4;4;60.2%
a5;5;75.0%

En plus d'enregistrer le fichier dans le format ci-dessus, je veux avoir des symboles de pourcentage en écrivant la dernière colonne. J'ai consulté ce post, mais je suis toujours confus sur comment je peux implémenter cela. J'utilise python 2.7.

Je vais vraiment apprécier toute aide.

4voto

schwobaseggl Points 31215

Le code suivant fonctionnera en utilisant le module csv et zip:

l1 = ['a1', 'a2', 'a3', 'a4', 'a5']
l2 = [1,2,3,4,5]
l3 = [20.0, 25.1, 51.2, 60.2, 75.0]
header = ['Label1', 'Label2', 'Label3'] 

import csv

with open('output.csv', 'w') as f:
    w = csv.writer(f, delimiter=';')
    w.writerow(header)
    for row in zip(l1, l2, (str(x)+'%' for x in l3)):
        w.writerow(row)

2voto

Alfred Ayi-bonte Points 149
l1 = ['a1', 'a2', 'a3', 'a4', 'a5']
l2 = [1,2,3,4,5]
l3 = [20.0, 25.1, 51.2, 60.2, 75.0]
reponse = ''
for i in range(len(l1)):
    valeur = "{0};{1};{2}%".format(l1[i], l2[i], l3[i])
    reponse = reponse+"\n"+valeur

entete = ['Libellé1', 'Libellé2', 'Libellé3'] 
titre = ';'.join(entete)
reponse = titre + reponse
print(reponse)

fichier = open("reponse.txt","w") 
fichier.write(reponse)
fichier.close()

1voto

timgeb Points 5966

Vous pouvez transposer vos lignes en utilisant zip puis les traiter avec le module csv.

>>> import csv
>>> l1 = ['a1', 'a2', 'a3', 'a4', 'a5']
>>> l2 = [1,2,3,4,5]
>>> l3 = [20.0, 25.1, 51.2, 60.2, 75.0]
>>> l3_percent = ['{!r}%'.format(x) for x in l3]
>>> header = ['Label1', 'Label2', 'Label3']
>>> rows = zip(l1, l2, l3_percent)
>>>
>>> with open('out.csv', 'w') as f:
...:    writer = csv.writer(f, delimiter=';', quoting=csv.QUOTE_NONE)
...:    writer.writerow(header)
...:    writer.writerows(rows)

Cela produit

Label1;Label2;Label3
a1;1;20.0%
a2;2;25.1%
a3;3;51.2%
a4;4;60.2%
a5;5;75.0%

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X