【问题标题】:Convert CSV file to JSON with python使用 python 将 CSV 文件转换为 JSON
【发布时间】:2021-07-23 23:44:00
【问题描述】:

我正在尝试将我的 CSV 电子邮件列表转换为 JSON 格式以通过 API 群发电子邮件。到目前为止,这是我的代码,但输出有问题。我的 VS 代码编辑器上没有任何输出。

import csv
import json


def make_json(csvFilePath, jsonFilePath):

    data = {}

    with open(csvFilePath, encoding='utf-8') as csvf:
        csvReader = csv.DictReader(csvf)

        for rows in csvReader:

            key = rows['No']
            data[key] = rows

    with open(jsonFilePath, 'w', encoding='utf-8') as jsonf:
        jsonf.write(json.dumps(data, indent=4))


csvFilePath = r'/data/csv-leads.csv'
jsonFilePath = r'Names.json'

make_json(csvFilePath, jsonFilePath)

这是我想要的 JSON 格式

  {
        "EmailAddress": "hello@youngstowncoffeeseattle.com",
        "Name": "Youngstown Coffee",
        "ConsentToTrack": "Yes"
    },

这是我的 CSV 列表

No,EmailAddress,ConsentToTrack
Zylberschtein's Delicatessen & Bakery,catering@zylberschtein.com,Yes
Youngstown Coffee,hello@youngstowncoffeeseattle.com,Yes

【问题讨论】:

  • 请不要在您的问题中添加指向图片的链接。只需包含 CSV 文件的示例,格式为代码示例(就像您的 Python 代码一样)。
  • 哦,明白了!更新了示例 CSV 列表

标签: python json api csv


【解决方案1】:

看来您可以使用csv.DictReader 来简化此操作。

如果我有data.csv,看起来像这样:

Name,EmailAddress,ConsentToTrack
Zylberschtein's Delicatessen,catering@zylberschtein.com,yes
Youngstown Coffee,hello@youngstowncoffeeseattle.com,yes

我可以像这样将它转换成 JSON:

>>> import csv
>>> import json
>>> fd = open('data.csv')
>>> reader = csv.DictReader(fd)
>>> print(json.dumps(list(reader), indent=2))
[
  {
    "Name": "Zylberschtein's Delicatessen",
    "EmailAddress": "catering@zylberschtein.com",
    "ConsentToTrack": "yes"
  },
  {
    "Name": "Youngstown Coffee",
    "EmailAddress": "hello@youngstowncoffeeseattle.com",
    "ConsentToTrack": "yes"
  }
]

这里我假设 CSV 中的标题可以逐字使用。如果您需要修改键名(例如,将“No”转换为“Name”),我会用一个示例进行更新。


如果您需要重命名列,它可能看起来更像这样:

import csv
import json


with open('data.csv') as fd:
    reader = csv.DictReader(fd)
    data = []
    for row in reader:
        row['Name'] = row.pop('No')
        data.append(row)

    print(json.dumps(data, indent=2))

鉴于此输入:

No,EmailAddress,ConsentToTrack
Zylberschtein's Delicatessen,catering@zylberschtein.com,yes
Youngstown Coffee,hello@youngstowncoffeeseattle.com,yes

这将输出:

[
  {
    "EmailAddress": "catering@zylberschtein.com",
    "ConsentToTrack": "yes",
    "Name": "Zylberschtein's Delicatessen"
  },
  {
    "EmailAddress": "hello@youngstowncoffeeseattle.com",
    "ConsentToTrack": "yes",
    "Name": "Youngstown Coffee"
  }
]

在我的编辑器上打印只是print(json.dumps(list(reader), indent=2))

我对你的编辑器不是很熟悉; print 是您在 Python 中生成控制台输出的方式。

【讨论】:

  • 如果你能列出一个例子那就太好了,在我的编辑器上打印它只是简单地 print(json.dumps(list(reader), indent=2))。 ?
猜你喜欢
  • 2023-03-28
  • 2022-09-23
  • 2019-03-25
  • 2023-03-03
  • 1970-01-01
  • 2016-02-08
  • 1970-01-01
  • 1970-01-01
  • 2018-01-04
相关资源
最近更新 更多