Convertir Json a CSV usando Python

Abajo, está la estructura json que estoy extrayendo de mi estación meteorológica en línea. También estoy incluyendo una secuencia de comandos python json_to_csv que se supone que convierte los datos json a la salida csv, pero solo devuelve un error de “Clave”. Quiero extraer datos de “current_observation”: solo.

{ "response": { "features": { "conditions": 1 } } , "current_observation": { "display_location": { "latitude":"40.466442", "longitude":"-85.362709", "elevation":"280.4" }, "observation_time_rfc822":"Fri, 26 Jan 2018 09:40:16 -0500", "local_time_rfc822":"Sun, 28 Jan 2018 11:22:47 -0500", "local_epoch":"1517156567", "local_tz_short":"EST", "weather":"Clear", "temperature_string":"44.6 F (7.0 C)", } } import csv, json, sys inputFile = open("pywu.cache.json", 'r') #open json file outputFile = open("CurrentObs.csv", 'w') #load csv file data = json.load(inputFile) #load json content inputFile.close() #close the input file output = csv.writer(outputFile) #create a csv.write output.writerow(data[0].keys()) for row in data: output = csv.writer(outputFile) #create a csv.write output.writerow(data[0].keys()) for row in data: output.writerow(row.values()) #values row 

¿Cuál es el mejor método para recuperar la cadena de temperatura y convertirla a formato .csv? ¡Gracias!

 import pandas as pd df = pd.read_json("pywu.cache.json") df = df.loc[["local_time_rfc822", "weather", "temperature_string"],"current_observation"].T df.to_csv("pywu.cache.csv") 

Tal vez los pandas pueden ser de ayuda para usted. La función .read_json () crea un dataframe agradable, desde el cual puede elegir fácilmente las filas y columnas deseadas. y se puede guardar como CSV también.

para agregar latitud y longitud a la línea csv, puede hacer esto:

 df = pd.read_json("pywu.cache.csv") df = df.loc[["local_time_rfc822", "weather", "temperature_string", "display_location"],"current_observation"].T df = df.append(pd.Series([df["display_location"]["latitude"], df["display_location"]["longitude"]], index=["latitude", "longitude"])) df = df.drop("display_location") df.to_csv("pywu.cache.csv") 

para imprimir la ubicación en valores numéricos, puede hacer esto:

 df = pd.to_numeric(df, errors="ignore") print(df['latitude'], df['longitude']) 

Esto encontrará todas las claves (por ejemplo, “temperature_string”) especificadas dentro del json blob y luego las escribirá en un archivo csv. Puede modificar este código para obtener varias claves.

 import csv, json, sys def find_deep_value(d, key): # Find a the value of keys hidden within a dict[dict[...]] # Modified from https://stackoverflow.com/questions/9807634/find-all-occurrences-of-a-key-in-nested-python-dictionaries-and-lists # @param d dictionary to search through # @param key to find if key in d: yield d[key] for k in d.keys(): if isinstance(d[k], dict): for j in find_deep_value(d[k], key): yield j inputFile = open("pywu.cache.json", 'r') # open json file outputFile = open("mypws.csv", 'w') # load csv file data = json.load(inputFile) # load json content inputFile.close() # close the input file output = csv.writer(outputFile) # create a csv.write # Gives you a list of temperature_strings from within the json temps = list(find_deep_value(data, "temperature_string")) output.writerow(temps) outputFile.close()