Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 按节点从CSV创建JSON_Python_Json_Csv - Fatal编程技术网

Python 按节点从CSV创建JSON

Python 按节点从CSV创建JSON,python,json,csv,Python,Json,Csv,我有美国所有州/县的CSV。我想将其转换为以下格式的JSON: Alabma: [ { "county_name":"Alabama -- Statewide", "fips":1000, "fips2":"'01000'", }, 但是我为此编写的python产生了以下结果 State: [{ "county_name":"Baldwin County", "fips":1003, "fips2":"'01003'", "st

我有美国所有州/县的CSV。我想将其转换为以下格式的JSON:

Alabma: [
  {
    "county_name":"Alabama -- Statewide",
    "fips":1000,
    "fips2":"'01000'",
  },
但是我为此编写的python产生了以下结果

 State: [{
    "county_name":"Baldwin County",
    "fips":1003,
    "fips2":"'01003'",
    "state_name":" Alabama"
  },
我想我只需要一点方向,我就能找到答案。谢谢你的帮助!下面是我的python:

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

您的数据似乎有混合分隔符,例如,如果您可以将其统一到选项卡,这应该是解决方案

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

我认为您的输入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)
输出:

{ 阿拉巴马州:[ { 县名称:奥托加县, fips:01001, 图二:“01001” }, { 县名称:鲍德温县, fips:01003, 图二:“01003” }, { 县名:巴布尔县, fips:01005, 图二:“01005” } ], 佛罗里达州:[ { 县名称:普特南县, fips:12107, 图二:“12107” }, { 县名称:圣约翰县, fips:12109, 图二:“12109” }, { 县名称:圣卢西县, fips:12111, 图二:“12111” }, { 县名称:圣罗莎县, fips:12113, 图二:“12113” } ], 爱荷华州:[ { 县名称:埃米特县, fips:19063, 图二:“19063” }, { 县名称:法耶特县, fips:19065, 图二:“19065” }, { 县名称:弗洛伊德县, fips:19067, 图二:“19067” }, { 县名:富兰克林县, fips:19069, 图二:“19069” }, { 县名称:弗里蒙特县, fips:19071, 图二:《19071》 }, { 县名称:格林县, fips:19073, 图二:《19073》 }, { 县名:格伦迪县, fips:19075, 图二:《19075》 }, { 县名:古思里县, fips:19077, 图二:《19077》 }, { 县名称:汉密尔顿县, fips:19079, 图二:《19079》 }, { 县名:汉考克县, fips:19081, 图二:《19081》 } ] }
谢谢,我知道这会产生类似于“郡”的东西:“‘阿拉巴马州-郡1’”,但这并不完全是我想要的,尽管它仍然是向前迈进了一步。最后,我将有两个下拉列表,一个是州,然后让县从选择中填充。虽然这很好,但我无法达到目的。谢谢。你能从CSV文件中发布一些行吗?例如,分隔符是空格?有一些标题吗?只是添加了标题,是的,分隔符是空格。你有什么反馈吗?