有没有办法在不导入 csv 的情况下从 .csv 创建 JSON?

Is there a way to create JSON from .csv without importing csv?

我有一些来自 Google 表格的简单 csv 数据,我想使用 Python 将其格式化为 JSON 这样我就可以 post在 API.

有没有办法不用导入就可以做到这一点 csv

Zapier 不支持导入 requests 以外的任何内容。

示例 csv 数据:

Name,ID,Price,Qty
Row 1,123,100,1
Row 2,123,56,2
Row 3,123,90,3
Row 4,213,68,5
Row 5,765,987,789
Row 6,123,123,123

更新:这是我所在的位置:

Zapier screenshot

但我收到错误消息:

    File "<string>", line 11, in the_function
NameError: name 'data' is not defined

错误是因为 data.csv 不是一个有效的变量名,你不能有 '.'在那里。

我不知道 Zapier 是如何工作的,但是如果您尝试从一个名为 'data.csv' 的文件中读取数据,并且您想要以下格式的输出

[{"name": "Row", "ID": 1, "Price": 100, "Qty":1}, ...

那就试试

# Reading each line the data.csv file into a list
with open("data.csv", "r") as f:
    input = f.readlines()
input = [i.strip('\n\r') for i in input] # Strip new line characters

s = "["
for k in input[1:]: # For every line except for the header
  s += '{{"Name": "{}", "ID": {}, "Price": {}, "Qty": {}}}, '.format(*k.split(","))
s += "]"

如果您正在尝试从变量 "input_data" 解析测试(看起来您正在尝试这样做),请尝试。

input = input_data['data'].split("\n")

s = "["
for k in input[1:]: # For every line except for the header
  s += '{{"Name": "{}", "ID": {}, "Price": {}, "Qty": {}}}, '.format(*k.split(","))
s += "]"

根据 zapier documentation:

Only the standard Python library and requests is available.

因此 import csvimport json 将被允许,因为它们是标准的 Python 库。

这取决于您希望 JSON 输出格式是什么格式。一个非常简单直接的转换是使用标准 Python csvjson 库,如下所示:

import csv
import json

with open('data.csv') as f_input:   
    data = list(csv.DictReader(f_input))

with open('data.json', 'w') as f_output:
    json.dump(data, f_output, indent=3)

给你一个输出JSON文件如下:

[
   {
      "Name": "Row 1",
      "ID": "123",
      "Price": "100",
      "Qty": "1"
   },
   {
      "Name": "Row 2",
      "ID": "123",
      "Price": "56",
      "Qty": "2"
   },
   {
      "Name": "Row 3",
      "ID": "123",
      "Price": "90",
      "Qty": "3"
   },
   {
      "Name": "Row 4",
      "ID": "213",
      "Price": "68",
      "Qty": "5"
   },
   {
      "Name": "Row 5",
      "ID": "765",
      "Price": "987",
      "Qty": "789"
   },
   {
      "Name": "Row 6",
      "ID": "123",
      "Price": "123",
      "Qty": "123"
   }
]

来自 Zapier Platform 团队的 David。

正如其他人提到的,data.csv = ... 无效 python,因此您的错误。

为了提供一些背景信息,您的 python 代码设置如下:

# this is done automatically, behind the scene
s = """Name,ID,Price,Qty
Row 1,123,100,1
Row 2,123,56,2
Row 3,123,90,3
Row 4,213,68,5
Row 5,765,987,789
Row 6,123,123,123"""

input_data = {"data": s}

所以要解析它,您的代码应该类似于:

import csv

result = {}
with csv.reader(input_data['data'].splitlines()) as r:
    for line in r:
        # organize the data how you want
        pass

return result

这应该可以让您将数据转换成您想要的任何形状!

您提到要将数据发送到 API - 您也可以在此代码步骤中执行此操作。参见 HTTP examples