Frage

Ich habe eine JSON-Datei, die ich in eine CSV-Datei verdeckte möge. Wie kann ich das mit Python?

Ich habe versucht:

import json
import csv

f = open('data.json')
data = json.load(f)
f.close()
f = open('data.csv')
csv_file = csv.writer(f)
for item in data:
    f.writerow(item)

f.close()

Doch es hat nicht funktioniert. Ich verwende Django und die Fehler, die ich empfangen ist:

file' object has no attribute 'writerow'

Also, dann habe ich versucht, die folgenden:

import json
import csv

f = open('data.json')
data = json.load(f)
f.close()

f = open('data.csv')
csv_file = csv.writer(f)
for item in data:
    csv_file.writerow(item)

f.close()

ich dann den Fehler:

sequence expected

Beispiel JSON-Datei:

[
  {
    "pk": 22,
    "model": "auth.permission",
    "fields": {
      "codename": "add_logentry",
      "name": "Can add log entry",
      "content_type": 8
    }
  },
  {
    "pk": 23,
    "model": "auth.permission",
    "fields": {
      "codename": "change_logentry",
      "name": "Can change log entry",
      "content_type": 8
    }
  },
  {
    "pk": 24,
    "model": "auth.permission",
    "fields": {
      "codename": "delete_logentry",
      "name": "Can delete log entry",
      "content_type": 8
    }
  },
  {
    "pk": 4,
    "model": "auth.permission",
    "fields": {
      "codename": "add_group",
      "name": "Can add group",
      "content_type": 2
    }
  },
  {
    "pk": 10,
    "model": "auth.permission",
    "fields": {
      "codename": "add_message",
      "name": "Can add message",
      "content_type": 4
    }
  }
]

Keine korrekte Lösung

Andere Tipps

Ich bin nicht sicher, dass diese Frage bereits gelöst ist oder nicht, aber lassen Sie mich fügen, was ich als Referenz getan haben.

Erstens hat Ihre JSON-Objekte verschachtelt, so kann es normalerweise nicht direkt in CSV umgewandelt werden. Sie müssen sich, dass so zu etwas ändern:

{
    "pk": 22,
    "model": "auth.permission",
    "codename": "add_logentry",
    "content_type": 8,
    "name": "Can add log entry"
},
......]

Hier ist mein Code zu generieren CSV aus, dass:

import csv
import json

x = """[
    {
        "pk": 22,
        "model": "auth.permission",
        "fields": {
            "codename": "add_logentry",
            "name": "Can add log entry",
            "content_type": 8
        }
    },
    {
        "pk": 23,
        "model": "auth.permission",
        "fields": {
            "codename": "change_logentry",
            "name": "Can change log entry",
            "content_type": 8
        }
    },
    {
        "pk": 24,
        "model": "auth.permission",
        "fields": {
            "codename": "delete_logentry",
            "name": "Can delete log entry",
            "content_type": 8
        }
    }
]"""

x = json.loads(x)

f = csv.writer(open("test.csv", "wb+"))

# Write CSV Header, If you dont need that, remove this line
f.writerow(["pk", "model", "codename", "name", "content_type"])

for x in x:
    f.writerow([x["pk"],
                x["model"],
                x["fields"]["codename"],
                x["fields"]["name"],
                x["fields"]["content_type"]])

Sie erhalten Ausgabe wie:

pk,model,codename,name,content_type
22,auth.permission,add_logentry,Can add log entry,8
23,auth.permission,change_logentry,Can change log entry,8
24,auth.permission,delete_logentry,Can delete log entry,8

Mit der pandas Bibliothek , Das ist so einfach wie mit zwei Befehlen!

pandas.read_json()

Um einen JSON-String in ein Pandas Objekt zu konvertieren (entweder eine Serie oder Datenrahmen). Dann werden die Ergebnisse unter der Annahme, wurden als df gespeichert:

df.to_csv()

, die entweder einen String zurückgeben oder direkt in eine CSV-Datei schreiben.

Auf der Grundlage der Ausführlichkeit der bisherigen Antworten, sollten wir alle danken Pandas für die Verknüpfung ein.

Ich gehe davon aus, dass Ihre JSON-Datei in eine Liste der Wörterbücher dekodieren. Zuerst müssen wir eine Funktion, die die JSON-Objekte abflachen:

def flattenjson( b, delim ):
    val = {}
    for i in b.keys():
        if isinstance( b[i], dict ):
            get = flattenjson( b[i], delim )
            for j in get.keys():
                val[ i + delim + j ] = get[j]
        else:
            val[i] = b[i]

    return val

Das Ergebnis dieses Schnipsel des Laufens auf dem JSON-Objekt:

flattenjson( {
    "pk": 22, 
    "model": "auth.permission", 
    "fields": {
      "codename": "add_message", 
      "name": "Can add message", 
      "content_type": 8
    }
  }, "__" )

ist

{
    "pk": 22, 
    "model": "auth.permission', 
    "fields__codename": "add_message", 
    "fields__name": "Can add message", 
    "fields__content_type": 8
}

Nachdem diese Funktion zu jedem dict in dem Eingangsarray von JSON Objekten anwenden:

input = map( lambda x: flattenjson( x, "__" ), input )

und das Finden der entsprechenden Spaltennamen:

columns = [ x for row in input for x in row.keys() ]
columns = list( set( columns ) )

Es ist nicht schwer, dies durch das csv-Modul ausgeführt wird:

with open( fname, 'wb' ) as out_file:
    csv_w = csv.writer( out_file )
    csv_w.writerow( columns )

    for i_r in input:
        csv_w.writerow( map( lambda x: i_r.get( x, "" ), columns ) )

Ich hoffe, das hilft!

JSON eine Vielzahl von Datenstrukturen darstellen kann - ein JS „Objekt“ ist in etwa wie ein Python dict (mit String-Schlüssel), ein JS „Array“ in etwa wie eine Python-Liste, und Sie können sie Nest so lange die letzten „Blatt“ Elemente sind Zahlen oder Strings.

CSV kann im Wesentlichen stellt nur eine 2-D-Tabelle - wahlweise mit einer ersten Reihe von „headers“, dh „Spaltennamen“, die die Tabelle interpretierbar als eine Liste von dicts machen, anstelle der normalen Auslegung, eine Liste von Listen (wieder „Blatt“ Elemente können Zahlen oder Strings sein).

Also, im allgemeinen Fall, können Sie nicht eine beliebige JSON-Struktur in eine CSV übersetzen. In einigen speziellen Fällen können Sie (Array von Arrays ohne weitere Verschachtelung; Arrays von Objekten, die alle haben genau die gleichen Schlüssel) kann. Welcher Sonderfall, wenn überhaupt, gilt für Ihr Problem? Die Einzelheiten der Lösung, hängt von den speziellen Fall, dass Sie haben. Angesichts der erstaunliche Tatsache, dass Sie nicht einmal erwähnen, die man trifft, vermute ich, Sie können nicht die Einschränkung angesehen haben, weder verwendbar Fall in der Tat gilt, und Ihr Problem ist unmöglich zu lösen. Aber bitte klären!

Eine generische Lösung, die übersetzt jede json Liste von Wohnung Objekte csv.

übergeben Sie die input.json Datei als erstes Argument auf der Kommandozeile.

import csv, json, sys

input = open(sys.argv[1])
data = json.load(input)
input.close()

output = csv.writer(sys.stdout)

output.writerow(data[0].keys())  # header row

for row in data:
    output.writerow(row.values())

Dieser Code sollte für Sie arbeiten, vorausgesetzt, dass Ihr JSON-Daten in einer Datei namens data.json.

import json
import csv

with open("data.json") as file:
    data = json.load(file)

with open("data.csv", "w") as file:
    csv_file = csv.writer(file)
    for item in data:
        fields = list(item['fields'].values())
        csv_file.writerow([item['pk'], item['model']] + fields)

Es wird einfach sein csv.DictWriter() zu verwenden, die detaillierte Umsetzung wie das sein kann:

def read_json(filename):
    return json.loads(open(filename).read())
def write_csv(data,filename):
    with open(filename, 'w+') as outf:
        writer = csv.DictWriter(outf, data[0].keys())
        writer.writeheader()
        for row in data:
            writer.writerow(row)
# implement
write_csv(read_json('test.json'), 'output.csv')
Hinweis

, dass dies setzt voraus, dass alle Ihre JSON-Objekte die gleichen Felder haben.

Hier ist der Referenz denen Sie helfen können.

Ich habe Probleme mit Dan vorgeschlagene Lösung , aber das ist für mich:

import json
import csv 

f = open('test.json')
data = json.load(f)
f.close()

f=csv.writer(open('test.csv','wb+'))

for item in data:
  f.writerow([item['pk'], item['model']] + item['fields'].values())

Wo "test.json" enthielt folgende:

[ 
{"pk": 22, "model": "auth.permission", "fields": 
  {"codename": "add_logentry", "name": "Can add log entry", "content_type": 8 } }, 
{"pk": 23, "model": "auth.permission", "fields": 
  {"codename": "change_logentry", "name": "Can change log entry", "content_type": 8 } }, {"pk": 24, "model": "auth.permission", "fields": 
  {"codename": "delete_logentry", "name": "Can delete log entry", "content_type": 8 } }
]

Wie in den vorangegangenen Antworten erwähnt die Schwierigkeit json zu csv bei der Umwandlung ist, weil eine JSON-Datei verschachtelt Wörterbücher enthalten kann und somit eine multidimensionale Datenstruktur sein, die Verse eine csv, die eine 2D-Datenstruktur ist. Allerdings ist eine gute Möglichkeit, eine multidimensionale Struktur in eine CSV zu drehen ist, mehrere CSVs zu haben, die zusammen mit Primärschlüssel binden.

In Ihrem Beispiel die erste CSV-Ausgabe hat die Spalten „pk“, „Modell“, „Felder“ als Spalt. Die Werte für „pk“ und „Modell“ sind leicht zu bekommen, sondern weil die „Felder“ Spalt ein Wörterbuch enthält, sollte es seine eigene csv sein und weil „Codename“ den Primärschlüssel erscheint, können Sie als Eingang benutzen für „Felder“ die erste csv abzuschließen. Die zweite CSV enthält das Wörterbuch von der „Felder“ Spalte mit dem Codenamen als Primärschlüssel, die verwendet werden können, die zusammen 2 CSVs zu binden.

Hier ist eine Lösung für Ihre JSON-Datei, die einen verschachtelten Wörterbücher 2 CSVs umwandelt.

import csv
import json

def readAndWrite(inputFileName, primaryKey=""):
    input = open(inputFileName+".json")
    data = json.load(input)
    input.close()

    header = set()

    if primaryKey != "":
        outputFileName = inputFileName+"-"+primaryKey
        if inputFileName == "data":
            for i in data:
                for j in i["fields"].keys():
                    if j not in header:
                        header.add(j)
    else:
        outputFileName = inputFileName
        for i in data:
            for j in i.keys():
                if j not in header:
                    header.add(j)

    with open(outputFileName+".csv", 'wb') as output_file:
        fieldnames = list(header)
        writer = csv.DictWriter(output_file, fieldnames, delimiter=',', quotechar='"')
        writer.writeheader()
        for x in data:
            row_value = {}
            if primaryKey == "":
                for y in x.keys():
                    yValue = x.get(y)
                    if type(yValue) == int or type(yValue) == bool or type(yValue) == float or type(yValue) == list:
                        row_value[y] = str(yValue).encode('utf8')
                    elif type(yValue) != dict:
                        row_value[y] = yValue.encode('utf8')
                    else:
                        if inputFileName == "data":
                            row_value[y] = yValue["codename"].encode('utf8')
                            readAndWrite(inputFileName, primaryKey="codename")
                writer.writerow(row_value)
            elif primaryKey == "codename":
                for y in x["fields"].keys():
                    yValue = x["fields"].get(y)
                    if type(yValue) == int or type(yValue) == bool or type(yValue) == float or type(yValue) == list:
                        row_value[y] = str(yValue).encode('utf8')
                    elif type(yValue) != dict:
                        row_value[y] = yValue.encode('utf8')
                writer.writerow(row_value)

readAndWrite("data")

Ich weiß, es ist eine lange Zeit gewesen, da diese Frage gestellt wurde, aber ich dachte, dass ich für alle anderen Antwort hinzufügen könnte und einen Blog-Post teilen, die ich denke, die Lösung in einer sehr prägnante Art und Weise erklären.

Hier ist der Link

Öffnen einer Datei zum Schreiben

employ_data = open('/tmp/EmployData.csv', 'w')

Erstellen des CSV-Writer-Objekt

csvwriter = csv.writer(employ_data)
count = 0
for emp in emp_data:
      if count == 0:
             header = emp.keys()
             csvwriter.writerow(header)
             count += 1
      csvwriter.writerow(emp.values())

Achten Sie darauf, um die Datei zu schließen, um den Inhalt

zu speichern
employ_data.close()

Das funktioniert relativ gut. Es flacht die json es in eine CSV-Datei zu schreiben. Verschachtelte Elemente verwaltet werden:)

Das ist für Python 3

import json

o = json.loads('your json string') # Be careful, o must be a list, each of its objects will make a line of the csv.

def flatten(o, k='/'):
    global l, c_line
    if isinstance(o, dict):
        for key, value in o.items():
            flatten(value, k + '/' + key)
    elif isinstance(o, list):
        for ov in o:
            flatten(ov, '')
    elif isinstance(o, str):
        o = o.replace('\r',' ').replace('\n',' ').replace(';', ',')
        if not k in l:
            l[k]={}
        l[k][c_line]=o

def render_csv(l):
    ftime = True

    for i in range(100): #len(l[list(l.keys())[0]])
        for k in l:
            if ftime :
                print('%s;' % k, end='')
                continue
            v = l[k]
            try:
                print('%s;' % v[i], end='')
            except:
                print(';', end='')
        print()
        ftime = False
        i = 0

def json_to_csv(object_list):
    global l, c_line
    l = {}
    c_line = 0
    for ov in object_list : # Assumes json is a list of objects
        flatten(ov)
        c_line += 1
    render_csv(l)

json_to_csv(o)

genießen.

Meine einfache Möglichkeit, dies zu lösen:

Erstellen Sie eine neue Python-Datei wie: json_to_csv.py

Fügen Sie diesen Code:

import csv, json, sys
#if you are not using utf-8 files, remove the next line
sys.setdefaultencoding("UTF-8")
#check if you pass the input file and output file
if sys.argv[1] is not None and sys.argv[2] is not None:

    fileInput = sys.argv[1]
    fileOutput = sys.argv[2]

    inputFile = open(fileInput)
    outputFile = open(fileOutput, 'w')
    data = json.load(inputFile)
    inputFile.close()

    output = csv.writer(outputFile)

    output.writerow(data[0].keys())  # header row

    for row in data:
        output.writerow(row.values())

Nach diesem Code hinzufügen, um die Datei speichern und am Terminal laufen:

  

Python json_to_csv.py input.txt output.csv

Ich hoffe, dass diese Hilfe Sie.

Seeya!

Es ist nicht eine sehr intelligente Art und Weise, es zu tun, aber ich habe das gleiche Problem und das ist für mich habe:

import csv

f = open('data.json')
data = json.load(f)
f.close()

new_data = []

for i in data:
   flat = {}
   names = i.keys()
   for n in names:
      try:
         if len(i[n].keys()) > 0:
            for ii in i[n].keys():
               flat[n+"_"+ii] = i[n][ii]
      except:
         flat[n] = i[n]
   new_data.append(flat)  

f = open(filename, "r")
writer = csv.DictWriter(f, new_data[0].keys())
writer.writeheader()
for row in new_data:
   writer.writerow(row)
f.close()

Modifizierte Alec McGail Antwort JSON mit Listen innerhalb

unterstützen
    def flattenjson(self, mp, delim="|"):
            ret = []
            if isinstance(mp, dict):
                    for k in mp.keys():
                            csvs = self.flattenjson(mp[k], delim)
                            for csv in csvs:
                                    ret.append(k + delim + csv)
            elif isinstance(mp, list):
                    for k in mp:
                            csvs = self.flattenjson(k, delim)
                            for csv in csvs:
                                    ret.append(csv)
            else:
                    ret.append(mp)

            return ret

Danke!

import json,csv
t=''
t=(type('a'))
json_data = []
data = None
write_header = True
item_keys = []
try:
with open('kk.json') as json_file:
    json_data = json_file.read()

    data = json.loads(json_data)
except Exception as e:
    print( e)

with open('bar.csv', 'at') as csv_file:
    writer = csv.writer(csv_file)#, quoting=csv.QUOTE_MINIMAL)
    for item in data:
        item_values = []
        for key in item:
            if write_header:
                item_keys.append(key)
            value = item.get(key, '')
            if (type(value)==t):
                item_values.append(value.encode('utf-8'))
            else:
                item_values.append(value)
        if write_header:
            writer.writerow(item_keys)
            write_header = False
        writer.writerow(item_values)

Versuchen Sie, diese

import csv, json, sys

input = open(sys.argv[1])
data = json.load(input)
input.close()

output = csv.writer(sys.stdout)

output.writerow(data[0].keys())  # header row

for item in data:
    output.writerow(item.values())

Dieser Code funktioniert für jede gegebene JSON-Datei

# -*- coding: utf-8 -*-
"""
Created on Mon Jun 17 20:35:35 2019
author: Ram
"""

import json
import csv

with open("file1.json") as file:
    data = json.load(file)



# create the csv writer object
pt_data1 = open('pt_data1.csv', 'w')
csvwriter = csv.writer(pt_data1)

count = 0

for pt in data:

      if count == 0:

             header = pt.keys()

             csvwriter.writerow(header)

             count += 1

      csvwriter.writerow(pt.values())

pt_data1.close()

Alecs Antwort ist groß, aber es funktioniert nicht in dem Fall, in dem es mehrere Verschachtelungsebenen sind. Hier ist eine modifizierte Version, die mehrere Ebenen der Verschachtelung unterstützt. Es macht auch die Header-Namen ein bisschen besser aus, wenn das verschachtelte Objekt bereits einen eigenen Schlüssel (zum Beispiel Firebase Analytics / BigTable / BigQuery Daten) gibt an:

"""Converts JSON with nested fields into a flattened CSV file.
"""

import sys
import json
import csv
import os

import jsonlines

from orderedset import OrderedSet

# from https://stackoverflow.com/a/28246154/473201
def flattenjson( b, prefix='', delim='/', val=None ):
  if val == None:
    val = {}

  if isinstance( b, dict ):
    for j in b.keys():
      flattenjson(b[j], prefix + delim + j, delim, val)
  elif isinstance( b, list ):
    get = b
    for j in range(len(get)):
      key = str(j)

      # If the nested data contains its own key, use that as the header instead.
      if isinstance( get[j], dict ):
        if 'key' in get[j]:
          key = get[j]['key']

      flattenjson(get[j], prefix + delim + key, delim, val)
  else:
    val[prefix] = b

  return val

def main(argv):
  if len(argv) < 2:
    raise Error('Please specify a JSON file to parse')

  filename = argv[1]
  allRows = []
  fieldnames = OrderedSet()
  with jsonlines.open(filename) as reader:
    for obj in reader:
      #print obj
      flattened = flattenjson(obj)
      #print 'keys: %s' % flattened.keys()
      fieldnames.update(flattened.keys())
      allRows.append(flattened)

  outfilename = filename + '.csv'
  with open(outfilename, 'w') as file:
    csvwriter = csv.DictWriter(file, fieldnames=fieldnames)
    csvwriter.writeheader()
    for obj in allRows:
      csvwriter.writerow(obj)



if __name__ == '__main__':
  main(sys.argv)

Da die Daten in einem Wörterbuch-Format zu sein scheinen, es scheint, dass Sie tatsächlich csv.DictWriter (), um tatsächlich gibt die Linien mit den entsprechenden Header-Informationen verwendet werden sollen. Dies sollte es ermöglichen, die Umwandlung etwas leichter zu handhaben. Der Feldname Parameter würde dann richtig die Reihenfolge festgelegt, während der Ausgang der ersten Linie wie die Header erlauben würde es später von csv.DictReader () gelesen und verarbeitet werden.

Zum Beispiel Mike Repass verwendet

output = csv.writer(sys.stdout)

output.writerow(data[0].keys())  # header row

for row in data:
  output.writerow(row.values())

Allerdings ändern, nur die Ersteinrichtung     output = csv.DictWriter (filesetting, Feldnamen = data [0] .keys ())

Beachten Sie, dass, da die Reihenfolge der Elemente in einem Wörterbuch nicht definiert ist, können Sie Feldnamen Einträge explizit erstellen müssen. Sobald Sie das tun, wird die writerow arbeiten. Das schreibt dann arbeiten, wie ursprünglich dargestellt.

Leider habe ich nicht enouthg Ruf einen kleinen Beitrag zu der erstaunlichen @Alec McGail Antwort zu machen. Ich war mit Python3 und ich habe benötigt, um die Karte zu einer Liste nach dem @Alexis R Kommentar zu konvertieren.

Additionaly habe ich die csv Schriftsteller gefunden wurde in die Datei eine zusätzliche CR Hinzufügen (Ich habe eine leere Zeile für jede Zeile mit Daten in der CSV-Datei). Die Lösung war sehr einfach nach der @ Jason R. Coombs Antwort auf diesen Thread: CSV in Python einen zusätzlichen Wagenrücklauf hinzugefügt

Sie müssen einfach die lineterminator = '\ n' Parameter auf den csv.writer hinzuzufügen. Es wird sein: csv_w = csv.writer( out_file, lineterminator='\n' )

Überraschenderweise fand ich, dass keine der hier bisher korrekt mit allen möglichen Szenarien geschrieben Antworten beschäftigt (zum Beispiel verschachteltem dicts, verschachtelten Listen, keine Werte, etc).

Diese Lösung sollte über alle Szenarien arbeiten:

def flatten_json(json):
    def process_value(keys, value, flattened):
        if isinstance(value, dict):
            for key in value.keys():
                process_value(keys + [key], value[key], flattened)
        elif isinstance(value, list):
            for idx, v in enumerate(value):
                process_value(keys + [str(idx)], v, flattened)
        else:
            flattened['__'.join(keys)] = value

    flattened = {}
    for key in json.keys():
        process_value([key], json[key], flattened)
    return flattened

Sie können diesen Code verwenden, um eine JSON-Datei in eine CSV-Datei zu konvertieren Nach dem Lesen der Datei bin Umwandlung ich das Objekt Pandas Datenrahmen und dann diese in eine CSV-Datei zu speichern

import os
import pandas as pd
import json
import numpy as np

data = []
os.chdir('D:\\Your_directory\\folder')
with open('file_name.json', encoding="utf8") as data_file:    
     for line in data_file:
        data.append(json.loads(line))

dataframe = pd.DataFrame(data)        
## Saving the dataframe to a csv file
dataframe.to_csv("filename.csv", encoding='utf-8',index= False)

Ich könnte an die Partei spät sein, aber ich denke, ich habe mit dem ähnlichen Problem befasst. Ich hatte eine JSON-Datei, die so ausgesehen

Ich wollte nur wenig Tasten / Werte aus dieser JSON-Datei extrahieren. So schrieb ich den folgenden Code, das gleiche zu extrahieren.

    """json_to_csv.py
    This script reads n numbers of json files present in a folder and then extract certain data from each file and write in a csv file.
    The folder contains the python script i.e. json_to_csv.py, output.csv and another folder descriptions containing all the json files.
"""

import os
import json
import csv


def get_list_of_json_files():
    """Returns the list of filenames of all the Json files present in the folder
    Parameter
    ---------
    directory : str
        'descriptions' in this case
    Returns
    -------
    list_of_files: list
        List of the filenames of all the json files
    """

    list_of_files = os.listdir('descriptions')  # creates list of all the files in the folder

    return list_of_files


def create_list_from_json(jsonfile):
    """Returns a list of the extracted items from json file in the same order we need it.
    Parameter
    _________
    jsonfile : json
        The json file containing the data
    Returns
    -------
    one_sample_list : list
        The list of the extracted items needed for the final csv
    """

    with open(jsonfile) as f:
        data = json.load(f)

    data_list = []  # create an empty list

    # append the items to the list in the same order.
    data_list.append(data['_id'])
    data_list.append(data['_modelType'])
    data_list.append(data['creator']['_id'])
    data_list.append(data['creator']['name'])
    data_list.append(data['dataset']['_accessLevel'])
    data_list.append(data['dataset']['_id'])
    data_list.append(data['dataset']['description'])
    data_list.append(data['dataset']['name'])
    data_list.append(data['meta']['acquisition']['image_type'])
    data_list.append(data['meta']['acquisition']['pixelsX'])
    data_list.append(data['meta']['acquisition']['pixelsY'])
    data_list.append(data['meta']['clinical']['age_approx'])
    data_list.append(data['meta']['clinical']['benign_malignant'])
    data_list.append(data['meta']['clinical']['diagnosis'])
    data_list.append(data['meta']['clinical']['diagnosis_confirm_type'])
    data_list.append(data['meta']['clinical']['melanocytic'])
    data_list.append(data['meta']['clinical']['sex'])
    data_list.append(data['meta']['unstructured']['diagnosis'])
    # In few json files, the race was not there so using KeyError exception to add '' at the place
    try:
        data_list.append(data['meta']['unstructured']['race'])
    except KeyError:
        data_list.append("")  # will add an empty string in case race is not there.
    data_list.append(data['name'])

    return data_list


def write_csv():
    """Creates the desired csv file
    Parameters
    __________
    list_of_files : file
        The list created by get_list_of_json_files() method
    result.csv : csv
        The csv file containing the header only
    Returns
    _______
    result.csv : csv
        The desired csv file
    """

    list_of_files = get_list_of_json_files()
    for file in list_of_files:
        row = create_list_from_json(f'descriptions/{file}')  # create the row to be added to csv for each file (json-file)
        with open('output.csv', 'a') as c:
            writer = csv.writer(c)
            writer.writerow(row)
        c.close()


if __name__ == '__main__':
    write_csv()

Ich hoffe, das wird helfen. Einzelheiten darüber, wie dieser Code arbeiten Sie überprüfen können, hier

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top