Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.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,我正在尝试使用python构建一个JSON文件,并从一个CSV文件开始 CSV文件如下所示: a,b,tableau.c,tableau2.d,tableau2.e,tableau2.f,tableau2.g,tableau.h 11725,11741,false,N/A,true,23,N/A,false [ { "a": "11725", "b": "11741", "tableau.c": "false", "tableau.h": "false",

我正在尝试使用python构建一个JSON文件,并从一个CSV文件开始

CSV文件如下所示:

a,b,tableau.c,tableau2.d,tableau2.e,tableau2.f,tableau2.g,tableau.h
11725,11741,false,N/A,true,23,N/A,false
[
  {
    "a": "11725",
    "b": "11741",
    "tableau.c": "false",
    "tableau.h": "false",
    "tableau2.d": "N/A",
    "tableau2.e": "true",
    "tableau2.f": "23",
    "tableau2.g": "N/A"
  }
]
到目前为止,我正在设法将csv文件转换为JSON文件,并将其排列为如下所示:

a,b,tableau.c,tableau2.d,tableau2.e,tableau2.f,tableau2.g,tableau.h
11725,11741,false,N/A,true,23,N/A,false
[
  {
    "a": "11725",
    "b": "11741",
    "tableau.c": "false",
    "tableau.h": "false",
    "tableau2.d": "N/A",
    "tableau2.e": "true",
    "tableau2.f": "23",
    "tableau2.g": "N/A"
  }
]
使用此代码:

import csv
import json

file = "myFile.csv"
json_file = "myFile.json"
csv_rows = []

with open(file) as csvfile:
    reader = csv.DictReader(csvfile)
    title = reader.fieldnames

    for row in reader:
        csv_rows.extend([{title[i]:row[title[i]] for i in     range(len(title))}])


with open(json_file, "w") as f:
    f.write(json.dumps(csv_rows, sort_keys=True, indent=4, separators=(',', ': ')))
但是我希望得到一个JSON文件,它看起来像这样:

[
    {
        "a": "11725",
        "b": "11741",
        "tableau": [
        { 
          "value" :"false",
          "name" : "c"
        },
        { 
          "value" :"false",
          "name" : "h"
        },
    ]
        "tableau2": [
        { 
          "value" :"N/A",
          "name" : "d"
        },
        { 
          "value" :"true",
          "name" : "e"
        },
        { 
          "value" :"23",
          "name" : "f"
        },
        { 
          "value" :"N/A",
          "name" : "g"
        },
    ]

    }
]
我一直在四处寻找如何做到这一点的答案,但到目前为止什么也没找到

有没有关于如何做的建议

提前感谢您

此功能:

for row in reader:
    row_result = {}
    for key, value in row.iteritems():
        if '.' in key:
            tableau, name = key.split('.')
            row_result.setdefault(tableau, []).append({'value': value, 'name': name})
        else:
            row_result[key] = value
    csv_rows.append(row_result)

您的csv文件是否与此完全相同,或者稍后文件中的每一行中是否会有更多的行/元素?只需澄清:
tableau
仅包含具有
值的元素:“false”
tableau2
所有其他元素?旁白:您的
for reader中的行
循环是多余的。试试看:
csv\u rows=list(reader)
Hi,谢谢你的帮助,但是Alex Hall回答了这个问题。从你的问题来看,这个答案是否可以推广还不清楚。Hi,非常感谢!我仍然需要确切地理解你做了什么,但这是完美的。