JSON & CSV#
courant
json — sérialisation#
import json
donnees = {"nom": "Ana", "age": 30, "actif": True}
json.dumps(donnees) # '{"nom": "Ana", "age": 30, "actif": true}'
json.dumps(donnees, indent=2) # formaté, lisible
json.dumps(donnees, ensure_ascii=False) # conserve les accents tels quels
json.loads('{"a": 1}') # {'a': 1}
json — fichiers#
with open("data.json", "w", encoding="utf-8") as f:
json.dump(donnees, f, indent=2, ensure_ascii=False)
with open("data.json", encoding="utf-8") as f:
donnees = json.load(f)
Correspondance des types#
| Python | JSON |
|---|---|
dict |
objet |
list, tuple |
tableau |
str |
chaîne |
int, float |
nombre |
True / False |
true / false |
None |
null |
Piège
Les clés d'un dict deviennent toujours des chaînes en JSON ; un tuple utilisé comme clé perd sa structure.
csv — lecture#
import csv
with open("data.csv", newline="", encoding="utf-8") as f:
lecteur = csv.reader(f, delimiter=",")
for ligne in lecteur: # chaque ligne est une list[str]
print(ligne)
with open("data.csv", newline="", encoding="utf-8") as f:
lecteur = csv.DictReader(f) # chaque ligne est un dict (clés = en-têtes)
for ligne in lecteur:
print(ligne["nom"])
csv — écriture#
with open("data.csv", "w", newline="", encoding="utf-8") as f:
ecrivain = csv.writer(f)
ecrivain.writerow(["nom", "age"])
ecrivain.writerows([["Ana", 30], ["Bo", 25]])
with open("data.csv", "w", newline="", encoding="utf-8") as f:
ecrivain = csv.DictWriter(f, fieldnames=["nom", "age"])
ecrivain.writeheader()
ecrivain.writerow({"nom": "Ana", "age": 30})
Piège
Toujours ouvrir les fichiers CSV avec newline="" : sinon des lignes vides supplémentaires apparaissent sous Windows.