Lesen und Schreiben von CSV- und JSON-Dateien mit Python

In O'Reillys Buch "Datenvisualisierung beginnend mit Python und JavaScript" Beachten Sie, dass die gute Eingabe- / Ausgabemethode für CSV- und JSON-Dateien in Python organisiert wurde. Als ich den Vorgang mit Jupyter Notebook überprüfte, gab es einige Stellen, an denen ein Fehler aufgetreten ist Es gibt einige Unterschiede zum Code im Buch.

Offizielle Website des Buches: https://www.oreilly.co.jp/books/9784873118086/#toc

Betriebsumgebung

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

Anwendungsfalldaten

Verwenden Sie Folgendes für Eingabe- / Ausgabedaten

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},
]

Codebeispiel

CSV-Datei lesen / schreiben

Das Schreiben des Wörterbuchs in die CSV-Datei mit Python ist wie folgt. Das erste Element des Arrays wird mit nobel_winners [0] .keys () abgerufen, um die Schlüssel des Wörterbuchs abzurufen. Verwenden Sie zum Sortieren der Schlüssel sortiert (Spalten) und weisen Sie Spalten zu. In dem Buch wurde es nach cols.sort () sortiert, aber da ein Fehler aufgetreten ist, wird es wie folgt geschrieben.

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')

Führen Sie Folgendes aus, um die exportierte Datei nobel_winners.csv zu lesen.

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

Lesen und Schreiben mit dem CSV-Modul

Lesen und schreiben Sie anschließend mit dem CSV-Modul von Python. Wenn Sie newline = '' nicht für open angeben, wenn Sie es mit Jupyter Notebook ausführen Es gibt einen weiteren Zeilenumbruch unter writer.writerow, also habe ich ihn eingefügt.

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)

Beim Lesen einer Datei mit dem CSV-Modul:

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']

Sie können CSV-Daten auch abrufen, indem Sie eine Zeile in ein Python-Wörterbuch konvertieren. Folgendes habe ich auf diese Weise erhalten.

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)])]

Der CSV-Reader errät den Datentyp beim Lesen aus einer CSV-Datei nicht Da alles als Zeichenfolge behandelt wird, muss das Jahr in int umgewandelt werden.

Lesen und Schreiben von JSON-Dateien

Python-Wörterbücher können mit dem json-Modul in JSON-Dateien gespeichert werden. Verwenden Sie beim Speichern die Dump-Methode des JSON-Moduls.

import json

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

Informationen zum Lesen von JSON-Dateien finden Sie im json-Modul Sie können dies mithilfe der Lademethode tun.

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}]

Beim Laden des JSON-Moduls ist im Gegensatz zu CSV der ganzzahlige Jahrestyp Es ist kein Guss erforderlich, da es unter Beibehaltung geladen wird.

JSON-Codierung vom Typ Datetime

So codieren Sie Python-Daten mit dem Datum / Uhrzeit-Typ Erstellen Sie einen benutzerdefinierten Encoder wie den folgenden.

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"}'

Zunächst ein angepasster Datumsverarbeitungscodierer Unterklasse JSONEncoder zum Erstellen. In diesem Prozess, wenn das übergebene Argument obj ein datetime-Objekt ist Es wird ausgeführt, um das Isoformat von Datum und Uhrzeit zurückzugeben. Legen Sie im Argument cls in der Methode json.dumps einen benutzerdefinierten Datumscodierer fest.

Verweise

Recommended Posts

Lesen und Schreiben von CSV- und JSON-Dateien mit Python
Lesen und Schreiben von JSON-Dateien mit Python
Lesen und Schreiben von Python CSV-Dateien
Lesen und Schreiben von CSV mit Python
Lesen und Schreiben von Text in Python
Lesen und schreiben Sie JSON-Dateien mit Python
[Python] CSV-Dateien lesen
Studie aus Python Lesen und Schreiben von Hour9-Dateien
Lesen und Schreiben passt Dateien mit Python (Memo)
Beispiel für das Lesen und Schreiben von CSV mit Python
Verschieben von CSV-Dateien mit Python Teil 1
Bearbeiten Sie Dateien und Ordner in Python
Umgang mit JSON-Dateien in Python
Zeichencode zum Lesen und Schreiben von CSV-Dateien mit Python ~ Windows-Umgebung ver ~
Lesen und Schreiben von NetCDF mit Python
Exportieren und Ausgeben von Dateien in Python
Hinweise zum Lesen und Schreiben von float32 TIFF-Bildern mit Python
CSV in Python
Dateneingabe / -ausgabe in Python (CSV, JSON)
entwurzeln: Python / Numpy-basierte Bibliothek zum Lesen und Schreiben von ROOT-Dateien
Umgang mit Json in Python
Lesen aus Textdateien und SQLite mit Python (+ Pandas), R, Julia (+ DataFrames)
Rufen Sie Optionen in Python sowohl aus JSON-Dateien als auch aus Befehlszeilenargumenten ab
Teilen Sie Dateien beim Schreiben des Vim-Plugins in Python
POST JSON mit Python und empfange mit PHP
Beim Lesen und Schreiben von INI-Dateien wird zwischen Groß- und Kleinschreibung unterschieden
Verarbeitung von CSV-Daten in voller und halber Breite in Python
Schließen Sie externe Kv-Dateien in Python Kivy ein und verwenden Sie sie
Gegenseitige Konvertierung zwischen JSON und YAML / TOML in Python
Suchen Sie rekursiv nach Dateien und Verzeichnissen in Python und geben Sie sie aus
Einfaches Formatieren von JSON mit Python
Stapel und Warteschlange in Python
TXT-Dateien mit Python lesen
Unittest und CI in Python
[R] [Python] Memo zum Lesen mehrerer CSV-Dateien in mehreren Zip-Dateien
[Python] Laden von CSV-Dateien mit Pandas
Pakete, die MIDI mit Python Midi und Pretty_Midi verarbeiten
Unterschied zwischen list () und [] in Python
Unterschied zwischen == und ist in Python
Zeigen Sie Fotos in Python und HTML an
Schreiben Sie ein JSON-Schema mit Python DSL
Sortieralgorithmus und Implementierung in Python
Über Python und Cython dtype
Laden Sie JSON-Typen dynamisch mit Python
Lesen und verwenden Sie Python-Dateien aus Python
Laden Sie Google Drive-Dateien in Python herunter
Zuweisungen und Änderungen in Python-Objekten
JSON-Codierung und -Decodierung mit Python
Überprüfen und verschieben Sie das Verzeichnis in Python
Verschlüsselung mit Python: IND-CCA2 und RSA-OAEP
Sortieren Sie große Textdateien in Python
Hashing von Daten in R und Python
Behandeln Sie Excel-CSV-Dateien mit Python
Funktionssynthese und Anwendung in Python
Lesen Sie Dateien parallel zu Python
Python-Protokollierung und Dump an JSON
Reverse Flat Pseudonym und Katakana in Python2.7
[GUI in Python] PyQt5-Menü und Symbolleiste-
Beim Schreiben eines Programms in Python
Erstellen und lesen Sie Messagepacks in Python