Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.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值与标头不匹配_Python_Json_Python 3.x - Fatal编程技术网

Python值与标头不匹配

Python值与标头不匹配,python,json,python-3.x,Python,Json,Python 3.x,我正在将CSV文件转换为以下格式的JSON CSV文件: name, email, date, phone john, example.com, 26/11/18, 123 john, hello.com, 12/08/18, 123456 错误结果: [ { "name": "john", "email": "example.com", "items": [ { "phone": "example.c

我正在将CSV文件转换为以下格式的JSON

CSV文件:

name, email,        date,     phone
john, example.com,  26/11/18,   123
john, hello.com,    12/08/18,  123456
错误结果:

[
  {
    "name": "john",
    "email": "example.com",
    "items": [
      {
        "phone": "example.com",
        "info": {
            "date": "example.com",
        }
      },
    ]
  },
]
代码:

预期格式:

[
  {
    "name": "john",
    "email": "example.com",
    "items": [
      {
        "phone": "123",
        "info": {
             "date": "26/11/18",
        }
      },
    ]
  },
]

k为标题,v为值。因此,您可以看到所有行的值都将重复,并且与标题不匹配。在第二个循环中,该值将复制所有标题的日期,依此类推

Maximilian Peters指出了为什么您的代码在注释中不起作用。一般来说,我会避免所有这些,并手动构建每个字典

import csv

result = []
with open("student.csv", "r") as csv_ledger:
    for row in csv.DictReader(csv_ledger, skipinitialspace=True):
        result.append({
            "name": row["name"],
            "email": row["email"],
            "items": [{
                "phone": row["phone"],
                "info": {"date": row["date"]},
            }],
        })

这是必要的,因为您发布的csv在每个逗号后都有空格。

这种方法过于复杂,结果可能会以严格的方式构造。您只需从字典中获取随机值,而不验证键是否正确。您不需要循环,也不需要过滤,只需直接从行['phone']和行['date']中绘制即可。{'phone':v,'info':{'date':v}}:您对两个不同的键使用了两次v。可能是这导致了您的问题?好吧,如果我这样做d['items']=[{k:v代表k,v在行中。items如果k在primary_fields2}]。结果完全匹配,但我需要插入info对象以包含日期感谢您的回答,我使用该方法的原因是结果必须进行分组数据。顺便说一句,是否可以将顶级数组[]转换为对象{}?@BebekimLim我不明白分组数据是什么意思。也许分两步做会更容易些?一个步骤是将csv转换为我发布的代码所在的词典列表,然后迭代您刚刚创建的词典列表并对它们进行分组或其他操作。或者你可以问另一个问题,提供关于你实际试图解决的问题的更多细节。当然,这是可能的,只需将其更改为result={}并更改result。将{附加到result[无论你的密钥应该是什么]={并将最后一个}更改为}。
import csv

result = []
with open("student.csv", "r") as csv_ledger:
    for row in csv.DictReader(csv_ledger, skipinitialspace=True):
        result.append({
            "name": row["name"],
            "email": row["email"],
            "items": [{
                "phone": row["phone"],
                "info": {"date": row["date"]},
            }],
        })