2017-10-17 1 views
0

Ich bin Anfänger in Python.Konvertieren von Textdaten in Json-Format

Ich habe die Textdaten in Json Format

Hier konvertieren ist die Probe Textdaten aus der Tabellenstruktur unter extrahiert:

Metric - Column 1 , 
Design Project - Column 2 , 
Design Target* - Column 3 , 
Median Property* - Column 4 

Metric Design Project Design Target* Median Property* 
Source EUI (kBtu/ft²) 3.1 Not Available 127.9 
Site EUI (kBtu/ft²) 1.0 Not Available 40.7 
Source Energy Use (kBtu) 314.0 Not Available 12,793.0 
Site Energy Use (kBtu) 100.0 Not Available 4,074.2 
Energy Cost ($) 2,000.00 Not Available 81,484.00 
Total GHG Emissions (Metric Tons CO2e) 0.0 Not Available 0.5 
ENERGY STAR score (1-100) Not Available 75 50 

Hier ist der Code unter:

import csv 
import json 

with open('output.txt', 'r') as csvfile: # Opens file 
    filereader = csv.reader(csvfile, delimiter=' ') 
    i = 0 
    header = [] 
    out_data = [] 
    for row in filereader: 
     row = [elem for elem in row if elem] 
     if i == 0: 
      i+=2 
      row[1:3] = [row[1]+" "+row[2]] # Design Project key 
      row[2:4] = [row[2]+" "+row[3]] # Design Target key 
      row[3:5] = [row[3]+" "+row[4]] # Median Property* 
      header = row 
     else: 
      row[0:3] = [row[0]+" "+row[1]+" "+row[2]] # Metric 
      if len(row) == 5: # check conditions for better parse 
       row[1:2] = [row[1]] # Design Project value 
       row[2:4] = [row[2]+" "+row[3]] # Design Target 

      _dict = {} 
      for elem, header_elem in zip(row, header): 
       _dict[header_elem] = elem 
      out_data.append(_dict) 

    print json.dumps(out_data) 

Oben Code, der für die ersten beiden Zeilen der Daten korrekt funktioniert. Hier

ist die Ausgabe des Codes,

[{"Metric": "Source EUI (kBtu/ft\u00b2)", "Design Target*": "Not Available", "Median Property*": "127.9", "Design Project": "3.1"}, {"Metric": "Site EUI (kBtu/ft\u00b2)", "Design Target*": "Not Available", "Median Property*": "40.7", "Design Project": "1.0"}] 

Wie kann ich die kompletten Daten in ein JSON-Format zu machen? Hier

+0

Ihre Daten nicht konsistent ist. Und Zeile = [Element für Element in Zeile, wenn Element] 'wird eine andere Anzahl von Elementen für die dritte Datenzeile haben als für die zweite Datenzeile. Deshalb funktioniert es nicht. Wahrscheinlich müssen Sie die Extraktion in mehreren Fällen trennen, z. wenn 'len (row) == 5' eine Umwandlung machen, und wenn' len (row) == 6' andere Konvertierung durchführen – PerunSS

+0

Aber wenn ich schreibe IF ELSe Bedingung werfen Wurf @PerunSS – venkat

+0

Können Sie hinzufügen, was Sie versucht haben ? – PerunSS

Antwort

0

ist die Antwort,

import csv 
import json 

with open('output.txt', 'r') as csvfile: # Opens file 
    filereader = csv.reader(csvfile, delimiter=' ') 
    i = 0 
    header = [] 
    out_data = [] 
    for row in filereader: 
     row = [elem for elem in row if elem] 
     if i == 0: 
      i+=1 
      row[1:3] = [row[1]+" "+row[2]] # Design Project key 
      row[2:4] = [row[2]+" "+row[3]] # Design Target key 
      row[3:5] = [row[3]+" "+row[4]] # Median Property* 
      header = row 

     elif len(row) == 8: 

      row[0:4] = [row[0]+" "+row[1]+" "+row[2]+" "+row[3]] # Metric value 

      if row[1] == 'Not': 
       row[1:3] = [row[1]+" "+row[2]] 
      else: 
       row[1:2] = [row[1]] # Design Project Value 
       row[2:4] = [row[2]+" "+row[3]] # Design Target 

      _dict = {} 
      for elem, header_elem in zip(row, header): 
       _dict[header_elem] = elem 
      out_data.append(_dict) 

     elif len(row) == 7: 
      #print len(row) 
      row[0:3]=[row[0]+" "+row[1]+" "+row[2]] # Metric Value 
      row[1:2] = [row[1]] # Design Project value 
      row[2:4] = [row[2]+" "+row[3]] # Design Target 

      _dict = {} 
      for elem, header_elem in zip(row, header): 
       _dict[header_elem] = elem 
      out_data.append(_dict) 

     else: 
      row[0:6] = [row[0]+" "+row[1]+" "+row[2]+" "+row[3]+" "+row[4]+" "+row[5]] # Metric Value 
      row[1:2] = [row[1]] # Design Project value 
      row[2:4] = [row[2]+" "+row[3]] # Design Target 
      _dict = {} 
      for elem, header_elem in zip(row, header): 
       _dict[header_elem] = elem 
      out_data.append(_dict) 

    print json.dumps(out_data)