سؤال

لدي ملف JSON الذي أرغب في تغطية ملف CSV. كيف يمكنني القيام بذلك مع بيثون؟

حاولت:

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

ومع ذلك، فإنه لا يعمل. أنا أستخدم Django والخطأ الذي تلقيته هو:

file' object has no attribute 'writerow'

لذلك، ثم حاولت ما يلي:

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

ثم احصل على الخطأ:

sequence expected

عينة ملف json:

[
  {
    "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
    }
  }
]

لا يوجد حل صحيح

نصائح أخرى

لست متأكدا من حل هذا السؤال بالفعل أم لا، لكن اسمحوا لي بالصق ما قمت به للإشارة.

أولا، قام JSON بتخصيص الكائنات، لذلك لا يمكن تحويلها مباشرة إلى CSV. تحتاج إلى تغيير ذلك إلى شيء مثل هذا:

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

هنا هو رمزي لتوليد CSV من ذلك:

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

سوف تحصل على الإخراج على النحو التالي:

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

مع ال pandas مكتبة, هذا سهل مثل استخدام أوامرين!

pandas.read_json()

لتحويل سلسلة JSON إلى كائن Pandas (إما سلسلة أو DataFrame). ثم، على افتراض أن النتائج قد تم تخزينها df:

df.to_csv()

والتي يمكن إما إرجاع سلسلة أو الكتابة مباشرة إلى ملف CSV.

بناء على حمى الإجابات السابقة، يجب علينا جميعا أن أشكر الباندا على الاختصار.

أفترض أن ملف JSON الخاص بك سيفشف إلى قائمة القواميس. أولا نحتاج إلى وظيفة سوف تتسطح كائنات JSON:

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

نتيجة تشغيل هذا القصاص على كائن JSON الخاص بك:

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

يكون

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

بعد تطبيق هذه الوظيفة على كل DCT في صفيف الإدخال من كائنات JSON:

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

وإيجاد أسماء الأعمدة ذات الصلة:

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

ليس من الصعب تشغيل هذا من خلال وحدة CSV:

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

آمل أن يساعد هذا!

يمكن ل JSON تمثيل مجموعة واسعة من هياكل البيانات - A JS "كائن" هو تقريبا مثل Python Dict (مع مفاتيح السلسلة)، ومجموعة JS "مجموعة" تقريبا مثل قائمة Python، ويمكنك أن تتبعها طالما النهائي " ورقة "العناصر هي أرقام أو سلاسل.

يمكن أن تمثل CSV أساسا جدول ثنائي الأبعاد فقط - اختياريا مع الصف الأول من "الرؤوس"، أي "أسماء الأعمدة"، والتي يمكن أن تجعل الجدول يمكن تفسيره كقائمة من المديسين، بدلا من التفسير العادي، قائمة القوائم (مرة أخرى، يمكن أن تكون عناصر "ورقة" أرقام أو سلاسل).

لذلك، في الحالة العامة، لا يمكنك ترجمة هيكل JSON التعسفي إلى CSV. في عدد قليل من الحالات الخاصة التي يمكنك (مجموعة من الصفائف بدون مزيد من التعشيش؛ صفائف من الكائنات التي تحتوي جميعها على نفس المفاتيح تماما). أي حالة خاصة، إن وجدت، تنطبق على مشكلتك؟ تفاصيل الحل تعتمد على حالة خاصة لديك. بالنظر إلى حقيقة مذهلة أنك لا تذكر حتى أي واحد ينطبق، أظن أنك قد لا تعتبر القيد، لا يمكن تطبيق حالات الاستخدام في الواقع، ومشكلتك مستحيلة حلها. ولكن يرجى توضيح!

حل عام الذي يترجم أي قائمة json عريضة كائنات إلى CSV.

قم بتمرير ملف Input.json كوسخة الأولى في سطر الأوامر.

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

يجب أن يعمل هذا الرمز من أجلك، على افتراض أن بيانات JSON الخاصة بك موجودة في ملف يسمى 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)

سيكون من السهل الاستخدام csv.DictWriter()، يمكن أن يكون التنفيذ المفصل مثل هذا:

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

لاحظ أن هذا يفترض أن جميع كائنات JSON الخاصة بك لها نفس الحقول.

هنا هو المرجعي والتي قد تساعدك.

كنت تواجه مشكلة مع الحل المقترح لدان, ، ولكن هذا عملت بالنسبة لي:

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

حيث تحتوي "Test.json" على ما يلي:

[ 
{"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 } }
]

كما ذكر في الإجابات السابقة، فإن الصعوبة في تحويل JSON إلى CSV هي لأن ملف JSON يمكن أن يحتوي على قواميس متداخلة وبالتالي يكون بنية بيانات متعددة الأبعاد آيات CSV هي بنية بيانات ثنائية الأبعاد. ومع ذلك، فإن طريقة جيدة لتحويل هيكل متعدد الأبعاد إلى CSV هو الحصول على CSVS متعددة تعادل مع المفاتيح الأساسية.

في مثالك، أول إخراج CSV يحتوي على الأعمدة "PK"، "نموذج"، "الحقول" كأعمدة لديك. من السهل الحصول على قيم "PK"، و "النموذج" ولكن نظرا لأن عمود "الحقول" يحتوي على قاموس، يجب أن يكون CSV الخاص به ولأنه "اسم Codename" يبدو أن يكون المفتاح الأساسي، يمكنك استخدام المدخلات ل "الحقول" لإكمال أول CSV. يحتوي CSV الثاني على القاموس من عمود "الحقول" مع Codename كإجراء أساسي يمكن استخدامه لربط 2 CSVS معا.

فيما يلي حلا لملف JSON الخاص بك الذي يحول قواميس متداخلة إلى 2 CSVS.

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

أعلم أنه منذ وقت طويل منذ طرح هذا السؤال لكنني اعتقدت أنني قد أضيف إلى إجابة الجميع وتبادل منشور مدونات أعتقد أن شرح الحل بطريقة موجزة للغاية.

هنا هو حلقة الوصل

افتح ملف للكتابة

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

إنشاء كائن كاتب CSV

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

تأكد من إغلاق الملف من أجل حفظ المحتويات

employ_data.close()

هذا يعمل بشكل جيد نسبيا. يسطح JSON لكتابة ملف CSV. يتم إدارة العناصر المتداخلة :)

هذا لبثيون 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)

استمتع.

طريقة بسيطة لحل هذا:

إنشاء ملف Python جديد مثل: json_to_csv.py

أضف هذا الرمز:

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

بعد إضافة هذا الرمز، احفظ الملف وتشغيله في المحطة:

python json_to_csv.py input.txt الإخراج

اتمنى ان يساعدك هذا.

اراك لاحقا!

إنها ليست وسيلة ذكية للغاية للقيام بذلك، لكنني تعاني من نفس المشكلة وهذا يعمل بالنسبة لي:

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

تعديل إجابة AleC McGail لدعم JSON مع قوائم داخل

    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

شكرا!

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)

جرب هذا

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

يعمل هذا الرمز لأي ملف JSON معطى

# -*- 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()

إجابة أليك رائع، لكنه لا يعمل في حالة وجود مستويات متعددة من التعشيش. إليك نسخة معدلة تدعم مستويات متعددة من التعشيش. كما أنه يجعل أسماء الرأس أجمل قليلا إذا كان الكائن المتداخل يحدد بالفعل مفتاحه الخاص (مثل تحليلات Firebase / BigTable / BigQuery Data):

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

نظرا لأن البيانات تبدو بتنسيق قاموس، فسيظهر ذلك فعليا استخدام CSV.DictWriter () لإخراج الأسطر بالفعل مع معلومات الرأس المناسبة. يجب أن يسمح هذا بالتحويل من التعامل مع أسهل إلى حد ما. سيتم بعد ذلك إعداد المعلمة FieldNames النظام بشكل صحيح أثناء إخراج السطر الأول حيث سيسمح الرؤوس بالقراءة ومعالجتها لاحقا بواسطة CSV.DiCtreader ().

على سبيل المثال، مايك ريباس المستخدمة

output = csv.writer(sys.stdout)

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

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

ومع ذلك، قم فقط بتغيير الإعداد الأولي للإخراج = csv.dictwriter (filesetting، fieldnames = البيانات [0] .keys ())

لاحظ أنه نظرا لأن ترتيب العناصر الموجودة في القاموس غير محدد، فقد تضطر إلى إنشاء إدخالات الأسماء الحديثة بشكل صريح. بمجرد أن تفعل ذلك، سيعمل الكترون. يكتب ثم يعمل كما هو مبين أصلا.

لسوء الحظ، لم أجد سمعة إنوثج لإجراء مساهمة صغيرة في إجابة McGail مذهلة. كنت أستخدم Python3 وكانت بحاجة لتحويل الخريطة إلى قائمة بعد تعليق alexis r.

لقد وجدت أن كاتب CSV كان يضيف CR إضافي إلى الملف (لدي سطر فارغ لكل سطر مع بيانات داخل ملف CSV). كان الحل سهل للغاية بعد Jason R. Coombs الإجابة على هذا الموضوع:CSV في بيثون إضافة عودة حاملة إضافية

تحتاج ببساطة إلى إضافة LINETERMINATOR = المعلمة " n" إلى CSV.Writer. سيكون ذلك: csv_w = csv.writer( out_file, lineterminator='\n' )

من المستغرب، لقد وجدت أن أيا من الإجابات التي تم نشرها هنا بشكل صحيح حتى الآن مع جميع السيناريوهات الممكنة (على سبيل المثال، القيود المتداخلة، قوائم متداخلة، لا توجد قيم، إلخ).

يجب أن يعمل هذا الحل عبر جميع السيناريوهات:

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

يمكنك استخدام هذا الرمز لتحويل ملف JSON إلى ملف CSV بعد قراءة الملف، وأنا أقول الكائن إلى Pandas DataFrame ثم حفظ هذا ملف CSV

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)

قد أكون متأخرا عن الحفلة، لكنني أعتقد أنه تعاملت مع مشكلة مماثلة. كان لدي ملف JSON الذي بدا هذا

JSON File Structure

أردت فقط استخراج عدد قليل من المفاتيح / القيم من ملف JSON. لذلك، كتبت الكود التالي لاستخراج نفسه.

    """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()

آمل أن يساعد هذا. للحصول على تفاصيل حول كيفية عمل هذا الرمز الذي يمكنك التحقق منه هنا

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top