繁体   English   中英

使用python将CSV文件转换为JSON

[英]Convert CSV file to JSON with python

我正在尝试将我的 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.DictReadercsv.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(json.dumps(list(reader), indent=2))吗?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM