En python 3, les choses sont un peu différentes, mais beaucoup plus simples et moins sujettes aux erreurs. C'est une bonne idée d'indiquer au CSV que votre fichier doit être ouvert avec utf8
car il rend ces données plus portables pour les autres (en supposant que vous n'utilisez pas un encodage plus restrictif, comme le latin1
)
import csv
toCSV = [{'name':'bob','age':25,'weight':200},
{'name':'jim','age':31,'weight':180}]
with open('people.csv', 'w', encoding='utf8', newline='') as output_file:
fc = csv.DictWriter(output_file,
fieldnames=toCSV[0].keys(),
)
fc.writeheader()
fc.writerows(toCSV)
- Notez que
csv
dans python 3 a besoin de l'option newline=''
sinon vous obtenez des lignes vides dans votre CSV lors de l'ouverture dans Excel/opencalc.
Alternativement : Je préfère utiliser le gestionnaire de csv dans l'application pandas
module. Je trouve qu'il est plus tolérant aux problèmes d'encodage, et pandas convertira automatiquement les nombres de type chaîne dans les CSV dans le type correct (int, float, etc) lors du chargement du fichier.
import pandas
dataframe = pandas.read_csv(filepath)
list_of_dictionaries = dataframe.to_dict('records')
dataframe.to_csv(filepath)
Note :
- pandas se chargera d'ouvrir le fichier pour vous si vous lui donnez un chemin, et choisira par défaut
utf8
en python3, et comprendre les en-têtes aussi.
- un dataframe n'a pas la même structure que ce que CSV vous donne, donc vous ajoutez une ligne au chargement pour obtenir la même chose :
dataframe.to_dict('records')
- pandas permet également de contrôler beaucoup plus facilement l'ordre des colonnes dans votre fichier csv. Par défaut, elles sont classées par ordre alphabétique, mais vous pouvez spécifier l'ordre des colonnes. Avec vanilla
csv
vous devez lui fournir un OrderedDict
ou ils apparaîtront dans un ordre aléatoire (si vous travaillez avec python < 3.5). Voir : Préserver l'ordre des colonnes dans un DataFrame Python Pandas pour plus.
0 votes
Duplicata possible de écriture d'un en-tête dans un csv en python avec DictWriter