Lire et écrire des fichiers CSV et JSON avec Python

Dans le livre d'O'Reilly "Data Visualization Beginning with Python and JavaScript" Notez que les bonnes méthodes d'entrée / sortie pour les fichiers csv et json en python ont été organisées. Lorsque j'ai vérifié le fonctionnement avec Jupyter Notebook, il y avait des endroits où une erreur s'est produite, donc Il y a quelques différences avec le code du livre.

Site officiel du livre: https://www.oreilly.co.jp/books/9784873118086/#toc

Environnement d'exploitation

Windows 10 Pro 64bit Python: 3.6.1 Anaconda: 4.4.0 Jupyter Notebook: 1.0.0

Utiliser les données de cas

Utilisez ce qui suit pour les données d'entrée / sortie

nobel_winners = [
{ 'category': 'Physics',
  'name': 'Albert Einstein',
  'nationality': 'Swiss',
  'sex': 'male',
  'year': 1921},
{ 'category': 'Physics',
  'name': 'Paul Dirac',
  'nationality': 'British',
  'sex': 'male',
  'year': 1933},
{ 'category': 'Chemistry',
  'name': 'Marie Curie',
  'nationality': 'Polish',
  'sex': 'female',
  'year': 1911},
]

Exemple de code

lire / écrire un fichier csv

L'écriture du dictionnaire dans le fichier csv avec python est la suivante. Le premier élément du tableau est récupéré avec nobel_winners [0] .keys () pour obtenir les clés du dictionnaire. Pour trier les clés, utilisez triés (cols) et attribuez-les à cols. Dans le livre, il a été trié par cols.sort (), mais comme une erreur s'est produite, il est écrit comme suit.

cols = nobel_winners[0].keys()
cols = sorted(cols)

with open('data/nobel_winners.csv', 'w') as f:
    f.write(','.join(cols) + '\n')
    
    for o in nobel_winners:
        row = [str(o[col]) for col in cols]
        f.write(','.join(row) + '\n')

Pour lire le fichier nobel_winners.csv exporté, exécutez ce qui suit.

with open('data/nobel_winners.csv', 'r') as f:
    for line in f.readlines():
        print(line, sep='')

Out


category,name,nationality,sex,year

Physics,Albert Enistein,Swiss,male,1921

Physics,Paul Dirac,British,male,1933

Chemistry,Marie Curie,Polish,female,1911

Lecture et écriture à l'aide du module csv

Ensuite, lisez et écrivez à l'aide du module csv de python. Si vous ne spécifiez pas newline = '' pour open, lorsque vous l'exécutez avec Jupyter Notebook Il y a un autre saut de ligne sous writer.writerow, alors je l'ai mis.

import csv

with open('data/nobel_winners.csv', 'w', newline='') as f:
    fieldnames = nobel_winners[0].keys()
    fieldnames = sorted(fieldnames)
    writer = csv.DictWriter(f, fieldnames=fieldnames)
    writer.writeheader()
    for w in nobel_winners:
        writer.writerow(w)

Lors de la lecture d'un fichier à l'aide du module csv:

import csv

with open('data/nobel_winners.csv', 'r') as f:
    reader = csv.reader(f)
    for row in reader:
        print(row, sep='')

Out


['category', 'name', 'nationality', 'sex', 'year']
['Physics', 'Albert Enistein', 'Swiss', 'male', '1921']
['Physics', 'Paul Dirac', 'British', 'male', '1933']
['Chemistry', 'Marie Curie', 'Polish', 'female', '1911']

Vous pouvez également obtenir des données csv en convertissant une ligne en dictionnaire Python. Voici ce que j'ai obtenu de cette façon.

import csv

with open('data/nobel_winners.csv') as f:
    reader = csv.DictReader(f)
    nobel_winners = list(reader)

for w in nobel_winners:
    w['year'] = int(w['year'])
    
nobel_winners

Out


[OrderedDict([('category', 'Physics'),
              ('name', 'Albert Enistein'),
              ('nationality', 'Swiss'),
              ('sex', 'male'),
              ('year', 1921)]),
 OrderedDict([('category', 'Physics'),
              ('name', 'Paul Dirac'),
              ('nationality', 'British'),
              ('sex', 'male'),
              ('year', 1933)]),
 OrderedDict([('category', 'Chemistry'),
              ('name', 'Marie Curie'),
              ('nationality', 'Polish'),
              ('sex', 'female'),
              ('year', 1911)])]

Le lecteur csv ne devine pas le type de données lors de la lecture à partir d'un fichier csv Puisque tout est traité comme une chaîne, year doit être transtypé en int.

Lire et écrire des fichiers JSON

Les dictionnaires Python peuvent être enregistrés dans des fichiers JSON à l'aide du module json. Lors de l'enregistrement, utilisez la méthode dump du module json.

import json

with open('data/nobel_winners.json', 'w') as f:
    json.dump(nobel_winners, f)

Pour lire les fichiers JSON, consultez le module json Vous pouvez le faire en utilisant la méthode de chargement.

import json

with open('data/nobel_winners.json') as f:
    nobel_winners = json.load(f)

nobel_winners

Out


[{'category': 'Physics',
  'name': 'Albert Enistein',
  'nationality': 'Swiss',
  'sex': 'male',
  'year': 1921},
 {'category': 'Physics',
  'name': 'Paul Dirac',
  'nationality': 'British',
  'sex': 'male',
  'year': 1933},
 {'category': 'Chemistry',
  'name': 'Marie Curie',
  'nationality': 'Polish',
  'sex': 'female',
  'year': 1911}]

Lors du chargement du module json, contrairement à csv, le type entier d'année est Aucun casting n'est requis car il sera chargé tout en étant conservé.

Codage JSON de type Datetime

Pour encoder des données Python contenant un type datetime Créez un encodeur personnalisé comme celui ci-dessous.

import datetime
import json

class JSONDateTimeEncoder(json.JSONEncoder):  
    def default(self, obj):
        if isinstance(obj, (datetime.date, datetime.datetime)):
            return obj.isoformat()
        else:
            return json.JSONEncoder.default(self, obj)
    
def dumps(obj):
    return json.dumps(obj, cls=JSONDateTimeEncoder)

now_str = dumps({'time': datetime.datetime.now()})
now_str

Out


'{"time": "2017-09-03T01:03:32.634095"}'

Tout d'abord, un encodeur de traitement de date personnalisé Sous-classez le JSONEncoder à créer. Dans ce processus, si l'argument passé obj est un objet datetime Il est en cours d'exécution pour renvoyer l'isoformat de la date et de l'heure. Définissez un encodeur de date personnalisé dans l'argument cls de la méthode json.dumps.

Les références

Recommended Posts

Lire et écrire des fichiers CSV et JSON avec Python
Lire et écrire des fichiers JSON avec Python
Lecture et écriture de fichiers CSV Python
Lire et écrire du CSV avec Python
Lire et écrire du texte en Python
Lire et écrire des fichiers JSON avec Python
[Python] Lecture de fichiers CSV
Étude à partir de Python Lecture et écriture de fichiers Hour9
La lecture et l'écriture s'adaptent aux fichiers avec Python (mémo)
Exemple de lecture et d'écriture de CSV avec Python
Translocation de fichiers CSV avec Python Partie 1
Manipuler des fichiers et des dossiers en Python
Gestion des fichiers JSON en Python
Code de caractères pour la lecture et l'écriture de fichiers csv avec python
Lire et écrire NetCDF avec Python
Exporter et exporter des fichiers en Python
Notes sur la lecture et l'écriture d'images TIFF float32 avec python
CSV en Python
Entrée / sortie de données en Python (CSV, JSON)
uproot: bibliothèque basée sur Python / Numpy pour lire et écrire des fichiers ROOT
Manipulation de json en python
Lecture à partir de fichiers texte et SQLite avec Python (+ Pandas), R, Julia (+ DataFrames)
Obtenez des options en Python à partir des fichiers JSON et des arguments de ligne de commande
Diviser les fichiers lors de l'écriture du plugin vim en python
POST JSON avec Python et recevez avec PHP
Sensible à la casse lors de la lecture et de l'écriture de fichiers INI
Traitement pleine largeur et demi-largeur des données CSV en Python
Inclure et utiliser des fichiers Kv externes avec Python Kivy
Conversion mutuelle entre JSON et YAML / TOML en Python
Recherche récursive de fichiers et de répertoires en Python et sortie
Formatez facilement JSON avec Python
Pile et file d'attente en Python
Lire des fichiers .txt avec Python
Unittest et CI en Python
[R] [Python] Memo pour lire plusieurs fichiers csv dans plusieurs fichiers zip
[Python] Chargement de fichiers csv à l'aide de pandas
Paquets qui gèrent le MIDI avec Python midi et pretty_midi
Différence entre list () et [] en Python
Différence entre == et est en python
Afficher les photos en Python et html
Ecrire un schéma JSON avec Python DSL
Algorithme de tri et implémentation en Python
À propos de Python et Cython dtype
Charger dynamiquement les types json avec python
Lire et utiliser des fichiers Python à partir de Python
Téléchargez des fichiers Google Drive en Python
Affectations et modifications des objets Python
Encodage et décodage JSON avec python
Vérifiez et déplacez le répertoire en Python
Chiffrement avec Python: IND-CCA2 et RSA-OAEP
Trier les gros fichiers texte en Python
Hashing de données en R et Python
Gérer les fichiers Excel CSV avec Python
Synthèse de fonctions et application en Python
Lire des fichiers en parallèle avec Python
Journalisation Python et vidage vers json
Inverser le pseudonyme plat et le katakana en Python2.7
[GUI en Python] Menu PyQt5 et barre d'outils-
Lors de l'écriture d'un programme en Python
Créer et lire des paquets de messages en Python