2015-04-04 3 views
0

У меня есть CSV всех штатов/стран в США. Я хотел бы, чтобы превратить это в JSON в следующем формате:Создайте JSON из CSV по Node

Alabma: [ 
    { 
    "county_name":"Alabama -- Statewide", 
    "fips":1000, 
    "fips2":"'01000'", 
    }, 

Но питон я пишу для этого производит следующие

State: [{ 
    "county_name":"Baldwin County", 
    "fips":1003, 
    "fips2":"'01003'", 
    "state_name":" Alabama" 
    }, 

Я думаю, что нужно просто немного направление, и я может понять это. Спасибо за вашу помощь! Вот мой питон:

import csv 
import json 
output = { 'state':[] } 
with open('county_state.csv', 'rU') as csv_file: 
    for state_name in csv.DictReader(csv_file): 
     output['state'].append({ 
      'fips': state_name['fips2'], 
      'county': state_name['county_name'] 

     }) 

print json.dumps(output) 

Некоторых примеры строки из файла CSV:

county_name fips fips2 state_name 
Autauga County 01001 '01001' Alabama 
Baldwin County 01003 '01003' Alabama 
Barbour County 01005 '01005' Alabama 
Putnam County 12107 '12107' Florida 
St. Johns County 12109 '12109' Florida 
St. Lucie County 12111 '12111' Florida 
Santa Rosa County 12113 '12113' Florida 
Emmet County 19063 '19063' Iowa 
Fayette County 19065 '19065' Iowa 
Floyd County 19067 '19067' Iowa 
Franklin County 19069 '19069' Iowa 
Fremont County 19071 '19071' Iowa 
Greene County 19073 '19073' Iowa 
Grundy County 19075 '19075' Iowa 
Guthrie County 19077 '19077' Iowa 
Hamilton County 19079 '19079' Iowa 
Hancock County 19081 '19081' Iowa 
+0

ограничителе пространства? Есть ли заголовок? –

+0

Просто добавил заголовки и да разделители - это пробелы. – wsankey

ответ

0

Ваших данные, кажется, смешались разделители, если вы могли бы равномерным его закладки, например, это должно быть решением ,

dictreader = DictReader(csvdata, delimiter='\t', quoting=QUOTE_NONE) 

output = {} 

for state in dictreader: 
    if not output.get(state['state_name']): 
     output[state['state_name']] = [] 
    output[state['state_name']].append({'county_name': state['county_name'], 'fips': state['fips'], 'fips2': state['fips2'], 'state_name': state['state_name']}) 
+0

Спасибо, я вижу, что это создает нечто вроде «графства»: «Алабама - графство 1», но это не совсем то, что я собирался (хотя это еще шаг вперед). В конце концов, у меня будет два выпадающих списка: один для состояния, а затем уйдут графства из этого выбора. Хотя это хорошо, меня это не доставит. Однако, спасибо. – wsankey

+0

Можете ли вы разместить несколько строк из файла CSV? –

+0

Несомненно, см. Выше! – wsankey

0

Я думаю, что ваш CSV-файл ввода, скорее всего, будет помечен вкладками, а не пробелами. Если это так, то это, кажется, производит JSON в формате, который вы говорите, что хотите:

from collections import defaultdict, OrderedDict 
import csv 
import json 

output = defaultdict(list) 
with open('county_state.csv', 'rb') as csv_file: 
    reader = csv.DictReader(csv_file, delimiter='\t') 
    for row in reader: 
     output[row['state_name']].append(
      OrderedDict((
       (fieldname, row[fieldname]) for fieldname in reader.fieldnames 
               if fieldname != 'state_name'))) 

# sort the output by state (optional) 
output = OrderedDict(((state, counties) for state, counties in 
              sorted(output.iteritems()))) 
print json.dumps(output, indent=2) 

Выход:

{ 
    "Alabama": [ 
    { 
     "county_name": "Autauga County", 
     "fips": "01001", 
     "fips2": "'01001'" 
    }, 
    { 
     "county_name": "Baldwin County", 
     "fips": "01003", 
     "fips2": "'01003'" 
    }, 
    { 
     "county_name": "Barbour County", 
     "fips": "01005", 
     "fips2": "'01005'" 
    } 
    ], 
    "Florida": [ 
    { 
     "county_name": "Putnam County", 
     "fips": "12107", 
     "fips2": "'12107'" 
    }, 
    { 
     "county_name": "St. Johns County", 
     "fips": "12109", 
     "fips2": "'12109'" 
    }, 
    { 
     "county_name": "St. Lucie County", 
     "fips": "12111", 
     "fips2": "'12111'" 
    }, 
    { 
     "county_name": "Santa Rosa County", 
     "fips": "12113", 
     "fips2": "'12113'" 
    } 
    ], 
    "Iowa": [ 
    { 
     "county_name": "Emmet County", 
     "fips": "19063", 
     "fips2": "'19063'" 
    }, 
    { 
     "county_name": "Fayette County", 
     "fips": "19065", 
     "fips2": "'19065'" 
    }, 
    { 
     "county_name": "Floyd County", 
     "fips": "19067", 
     "fips2": "'19067'" 
    }, 
    { 
     "county_name": "Franklin County", 
     "fips": "19069", 
     "fips2": "'19069'" 
    }, 
    { 
     "county_name": "Fremont County", 
     "fips": "19071", 
     "fips2": "'19071'" 
    }, 
    { 
     "county_name": "Greene County", 
     "fips": "19073", 
     "fips2": "'19073'" 
    }, 
    { 
     "county_name": "Grundy County", 
     "fips": "19075", 
     "fips2": "'19075'" 
    }, 
    { 
     "county_name": "Guthrie County", 
     "fips": "19077", 
     "fips2": "'19077'" 
    }, 
    { 
     "county_name": "Hamilton County", 
     "fips": "19079", 
     "fips2": "'19079'" 
    }, 
    { 
     "county_name": "Hancock County", 
     "fips": "19081", 
     "fips2": "'19081'" 
    } 
    ] 
} 
+0

Есть ли у вас отзывы? – martineau

Смежные вопросы