Python >> Tutoriel Python >  >> Python Tag >> JSON

Convertir CSV en JSON en Python

5 étapes faciles pour convertir un CSV en un fichier JSON

Vous pouvez convertir un fichier CSV en fichier JSON en suivant les cinq étapes suivantes :

  1. Importer le csv et json bibliothèques
  2. Ouvrez le CSV en tant qu'objet fichier en mode lecture à l'aide du open(path_to_csv, 'r') fonction dans un gestionnaire de contexte (=with environnement).
  3. Chargez le contenu CSV dans Python en utilisant le csv.DictReader(fobj) et passez l'objet fichier que vous venez de créer.
  4. Itérer sur chaque row et mettre à jour un dictionnaire nouvellement créé my_json en utilisant l'une des valeurs de colonne comme clé :my_json[key] = row
  5. Stocker le my_json données de dictionnaire dans un fichier JSON en utilisant le json.dumps(my_json) fonction.

Voici un exemple de code qui convertit le fichier CSV 'my_file.csv' vers un fichier JSON 'my_file.json' :

import csv
import json 


csv_file = 'my_file.csv'
json_file = 'my_file.json'

my_json = {}
with open(csv_file, 'r') as fobj:
    reader = csv.DictReader(fobj)
    for row in reader:
        # Use one of the CSV column names as a key
        key = row['Name']
        my_json[key] = row 

with open(json_file,'w') as fobj:
    fobj.write(json.dumps(my_json, indent=2))

Notez que vous devez utiliser l'une des colonnes CSV comme clé. Dans cet exemple, nous avons utilisé la colonne 'Name ‘ de notre fichier CSV. Dans votre cas, vous devrez utiliser vos propres en-têtes de colonne.

Fichier CSV d'entrée :

Name,Job,Age,Income
Alice,Programmer,23,110000
Bob,Executive,34,90000
Carl,Sales,45,50000

Fichier JSON de sortie :

{
  "Alice": {
    "Name": "Alice",
    "Job": "Programmer",
    "Age": "23",
    "Income": "110000"
  },
  "Bob": {
    "Name": "Bob",
    "Job": "Executive",
    "Age": "34",
    "Income": "90000"
  },
  "Carl": {
    "Name": "Carl",
    "Job": "Sales",
    "Age": "45",
    "Income": "50000"
  }
}

Vous pouvez l'essayer vous-même dans notre Jupyter Notebook interactif ici :

Python Convertir CSV en JSON avec en-têtes

Le csv.DictReader() L'approche présentée précédemment suppose que la première ligne du CSV est l'en-tête. Ainsi, la première ligne est utilisée comme en-tête du CSV — par exemple, pour accéder à la clé de ligne spécifique de la colonne 'Name' en utilisant row['Name'] .

Python Convertir CSV en JSON sans en-têtes

Le csv.DictReader() L'approche présentée précédemment suppose que la première ligne du CSV est l'en-tête.

Si votre fichier CSV ne contient aucune information d'en-tête sur la première ligne, vous pouvez les définir manuellement à l'aide du fieldnames argument du csv.DictReader() méthode qui prend une séquence d'étiquettes de colonne (chaînes).

Voici la syntaxe du DictReader() méthode :

 class csv.DictReader(f, fieldnames=None, restkey=None, restval=None, dialect='excel', *args, **kwds)

"Le fieldnames paramètre est une séquence. Si fieldnames est omis, les valeurs de la première ligne du fichier f sera utilisé comme fieldnames ." — Documents

L'extrait de code suivant montre comment convertir le même CSV sans en-têtes à un fichier JSON en définissant des chaînes de colonne personnalisées (en-tête) sous forme de liste ['XXX', 'YYY', 'ZZZ', '---'] :

import csv
import json 


csv_file = 'my_file.csv'
json_file = 'my_file.json'

my_json = {}
with open(csv_file, 'r') as fobj:
    reader = csv.DictReader(fobj, fieldnames=['XXX', 'YYY', 'ZZZ', '---'])
    for row in reader:
        key = row['---']
        my_json[key] = row 

with open(json_file,'w') as fobj:
    fobj.write(json.dumps(my_json, indent=2))

Voici les fichiers d'entrée et de sortie :

Fichier CSV d'entrée :

Name,Job,Age,Income
Alice,Programmer,23,110000
Bob,Executive,34,90000
Carl,Sales,45,50000

Fichier JSON de sortie :

{
  "Income": {
    "XXX": "Name",
    "YYY": "Job",
    "ZZZ": "Age",
    "---": "Income"
  },
  "110000": {
    "XXX": "Alice",
    "YYY": "Programmer",
    "ZZZ": "23",
    "---": "110000"
  },
  "90000": {
    "XXX": "Bob",
    "YYY": "Executive",
    "ZZZ": "34",
    "---": "90000"
  },
  "50000": {
    "XXX": "Carl",
    "YYY": "Sales",
    "ZZZ": "45",
    "---": "50000"
  }
}

Ou, en capture d'écran :

Vous pouvez voir que la première ligne est maintenant utilisée comme ligne d'entrée CSV normale et non comme en-tête comme dans l'exemple précédent sans spécifier le fieldnames argument du DictReader() méthode.

Python Convertir CSV en pandas JSON

Le pandas.to_json() convertit un objet DataFrame en une chaîne JSON.

La syntaxe de cette méthode est la suivante :

# Syntax to_json()
DataFrame.to_json(path_or_buf=None, orient=None, date_format=None, double_precision=10, force_ascii=True, date_unit='ms', default_handler=None, lines=False, compression='infer', index=True, indent=None, storage_options=None)

L'exemple suivant lit dans le countries.csv fichier à un DataFrame. Ce DataFrame est ensuite converti en JSON :

df = pd.read_csv('countries.csv').head()
result = df.to_json(indent=4, orient='records', lines=True)
print(result)
  • La ligne [1] lit dans les cinq (5) premières lignes (tête) du countries.csv dossier. La sortie est enregistrée dans un DataFrame (df ).
  • La ligne [2] fait ce qui suit :
    • convertit le DataFrame au format JSON
    • formate la sortie en indentant chaque enregistrement de quatre (4) espaces à partir de la gauche
    • définit le paramètre orient sur les enregistrements et les lignes sur True (voir définition ci-dessus).
    • enregistre la sortie dans result .
  • La ligne [3] envoie le résultat au terminal.

Sortie - result

{
"Country":"Germany",
"Capital":"Berlin",
"Population":83783942,
"Area":357021
}
{
"Country":"France",
"Capital":"Paris",
"Population":67081000,
"Area":551695
}
{
"Country":"Spain",
"Capital":"Madrid",
"Population":47431256,
"Area":498511
}
{
"Country":"Italy",
"Capital":"Rome",
"Population":60317116,
"Area":301338
}
{
"Country":"Poland",
"Capital":"Warsaw",
"Population":38383000,
"Area":312685
}

Plus de conversions CSV Python

🐍 En savoir plus :J'ai compilé un "guide ultime" sur le blog Finxter qui vous montre la meilleure méthode, respectivement, pour convertir un fichier CSV en JSON, Excel, dictionnaire, Parquet, liste, liste de listes, liste de tuples, fichier texte, DataFrame , XML, tableau NumPy et liste de dictionnaires.


Ouf ! Terminons cet article sur une note plus amusante ! 🙂

Humour de programmeur

Q: How do you tell an introverted computer scientist from an extroverted computer scientist?

A: An extroverted computer scientist looks at your shoes when he talks to you.