import json
import csv
import time
import logging
import datetime as dt
json_file_path = "D:\.json"
csv_file_path = "D:\.csv"
global_key = []
global_val = []
final_values = [{}]
print ('Device Details script started at:%s'%(dt.datetime.utcnow()))
def to_string(s):
try:
return str(s)
except:
return s.encode('utf-8')
def set_final_values(final_key, final_val, path_key_str):
flag = 0
b = 0
for a in final_key:
try:
b = int(a)
flag = 1
try:
len((final_values)< b+1)
except:
final_values.append({})
except:
continue
logging.debug("Keys and Values updated and assigning to final_values list")
final_values[b][path_key_str] = final_val
def fetch_key_value(input_json, path_key = None, path_val = None, last_key = None):
if path_key is None:
path_key = []
path_val = []
if last_key is not None:
path_key = path_key + [last_key]
if type(input_json) is dict and input_json:
for key, val in input_json.iteritems():
if(type(val) is not dict and type(val) is not list):
path_val = path_val + [to_string(val)]
if type(input_json[key]) is dict or type(input_json[key] is list):
path_key, path_val = fetch_key_value(input_json[key], path_key, path_val, key)
if len(path_key)>0:
path_key.pop()
elif type(input_json) is list and input_json:
for entity in input_json:
path_key, path_val = fetch_key_value(entity, path_key, path_val, input_json.index(entity))
if len(path_key)>0:
path_key.pop()
else:
if path_key:
global global_key
global global_val
val = []
val = path_val
tmp_val = ""
path_key_str = ""
for i in path_key:
if(path_key_str == ""):
path_key_str = to_string(i)
else:
if not isinstance(i,int):
path_key_str = path_key_str + "_" + to_string(i)
global_key = global_key + [path_key_str]
if val:
tmp_val = str(val.pop())
set_final_values(path_key, tmp_val, path_key_str)
path_key.pop()
global_val = global_val + [tmp_val]
return path_key, path_val
def enter_header(header):
final_list = []
for x in header:
if x not in final_list:
final_list.append(to_string(x))
print("Header added.")
logging.debug("Header added.")
return final_list
def enter_csv_row(rows, csvwriter):
for x in rows:
if x != {}:
csvwriter.writerow(x)
print("Rows added.")
logging.debug("Rows added.")
def format_data(local_key, local_values):
with open(csv_file_path,'wb') as csv_file:
header = enter_header(local_key)
csvwriter = csv.DictWriter(csv_file, fieldnames = header)
csvwriter.writeheader()
enter_csv_row(local_values, csvwriter)
try:
with open(json_file_path, 'r') as json_file:
json_data = json.load(json_file)
json_keys, jason_vals = fetch_key_value(json_data)
format_data(global_key, final_values)
print("CSV created successfully.")
logging.debug("CSV created successfully.")
except Exception as e:
print ("Exception =>" + str(e))
logging.debug("Exception =>" + str(e))