我有这样一个csv文件:

'3', '8948', 'f678'
'3', '5654', 'f644'
'6', '5567', 'g3335'
'9', '4467', 'g3356'
'9', '7666', 'h4433'

CSV保存各种记录.第一列表示一个ID字段.

我遍历了CSV文件并将行添加到列表中.

然后,我使用该列表创建了一个JSON文件.看起来像这样:

[
    [
        "3",
        "8948",
        "f678"
    ],
    [
        "3",
        "5654",
        "f644"
    ],
    [
        "6",
        "5567",
        "g3335"
    ]
     ...

但据我所知,我将无法读取此JSON并在其上执行任务?从我所看到的,我需要它是一个字典,但我如何从我的CSV制作字典,特别是因为ID字段是重复的,不会是唯一的.唯一的其他 Select 是只使用行号,如果这是正确的-我如何从我的CSV创建一个带有行号的字典?

推荐答案

我猜想到目前为止,您的代码是这样的:

import csv
import json

data: list[list[str]] = []
with open("input.csv", newline="") as f_in:
    reader = csv.reader(f_in)
    for row in reader:
        data.append(row)

with open("data.json", "w") as f_out:
    json.dump(data, f_out, indent=2)

为了解决您的第一个问题/担忧,即此JSON是否有效...

更大的概念是Python的json模块生成有效的json.如果在您转储数据时模块没有抱怨什么,那么JSON就是好的.

但为了更直接地解决您的问题,JSON可以看起来像很多不同的东西:

print(json.dumps(1))
print(json.dumps("A"))
print(json.dumps({}))
print(json.dumps([]))

每个dump()都会生成有效的JSON.我不知道如何正式证明这些是有效的,但我使用了trust种工具,如Python的json模块(它经过多年的实际使用,可能在全世界都得到了审查).我还进入了https://jsonlint.com/,直接输入了这些简单的例子,得到了所有人的"有效JSON".

现在,如何处理JSON?

您可以按原样处理它,也可以通过自己提供列名/键来创建所需的 struct (假设您知道数据代表什么):

data_keyed: list[dict[str, Any]] = []
with open("input.csv", newline="") as f_in:
    reader = csv.reader(f_in)
    for row in reader:
        data_row = {"Col1": row[0], "Col2": row[1], "Col3": row[2]}
        data_keyed.append(data_row)

with open("data_keyed.json", "w") as f_out:
    json.dump(data_keyed, f_out, indent=2)

现在我们得到:

[
  {
    "Col1": "3",
    "Col2": "8948",
    "Col3": "f678"
  },
  {
    "Col1": "3",
    "Col2": "5654",
    "Col3": "f644"
  },
  ...

Python相关问答推荐

如何找出Pandas 图中的连续空值(NaN)?

人口全部乱序 - Python—Matplotlib—映射

具有相同图例 colored颜色 和标签的堆叠子图

python sklearn ValueError:使用序列设置数组元素

提取数组每行的非零元素

如何在Django模板中显示串行化器错误

如何提高Pandas DataFrame中随机列 Select 和分配的效率?

极点:在固定点扩展窗口

使用Scikit的ValueError-了解

更新包含整数范围的列表中的第一个元素

pyspark where子句可以在不存在的列上工作

是否从Python调用SHGetKnownFolderPath?

将.exe文件从.py转换后出现问题.";ModuleNotFoundError:没有名为';Selify;的模块

Django/Python-UpdateView中的Delete函数正在复制,而不是删除

无法在没有echo的情况下判断macOS上Python中按下的键

LookupError:使用Django-Configurations时未安装标签为admin&39;的应用程序

使用Pandas 遍历词典

如何在Pandas 分组处理中执行多个功能

修复如何使用python排序方法对列表中的元素进行排序

Pandas Groupby在try 聚合列时引发ValueError:LEN(索引)!=len(标签)