【问题标题】:How to convert a CSV file to single JSON-serializable variables?如何将 CSV 文件转换为单个 JSON 可序列化变量?
【发布时间】:2019-12-12 23:07:39
【问题描述】:

为了自动化我们的报告,我们希望将 Google 表格单元格转换为可以在预先编写的文本中使用的动态字段。我们认为 Zapier 可以做到这一点。

我们目前有以下代码:

import csv
import requests

from csv import reader

result = []

url = input_data['csvlink']

stats = requests.get(url)
content = stats.content.decode('iso-8859-1')

for line in csv.reader(content.splitlines()):
    result.append(line)

values = { i : result[i] for i in range(0, len(result) ) }

return values

但是,此代码返回一个字典,其中 CSV 行号作为键,整个对应行的数据作为其值。

我们如何返回一个字典,其中包含 CSV 中每个唯一数据点的键?

【问题讨论】:

    标签: zapier


    【解决方案1】:

    好问题!

    这是计算机完全按照您的指示正确执行的另一种情况。即在:

    values = { i : result[i] for i in range(0, len(result) ) }
    

    您说values 应该是一个字典,其中每个键都是一个数字,值是结果中该索引处的 csv 行。

    在 cmets 中,您提到想要整个 CSV。尝试类似:

    from string import ascii_uppercase
    
    result = {}
    # your CSV code goes here. The data should be in `lines`, not `result`
    
    for num_row, line in enumerate(lines):
        for num_column, col in enumerate(line):
            result[ascii_uppercase[num_column] + str(num_row + 1)] = col
    
    return result
    

    只要列数少于 26,这将起作用。 AA, AB 不会这样做,但如果您需要,可以使用更多代码。

    【讨论】:

    • 感谢您的回复,非常感谢!我现在更清楚地理解了我以前的代码。但是,最后一点我并没有完全跟随你。这段代码中 c['SOME INDEX HERE'] 的上下文是什么?我希望能够在以下操作步骤中选择每个 CSV 数据点作为其自己的变量。您建议用什么替换 SOME INDEX HERE?
    • 进一步澄清——所需的输出如下: { A1 : data A1, A2 : data A2, ... }
    • 我认为问题在于您使用的是 splitlines(),如果您的数据类似于“data,data,data,...,/ndata,data,data” /n 是一个换行符,然后 splitlines() 会将其分成两个字符串,而不是分隔每个数据点。如果您在 CSV 读取期间添加一个额外的循环,您可以隔离这些数据点。所以在'for line in csv.read ...”之后添加第二个嵌套的for循环:“for data in line: result.append(data)”。希望这很清楚。我可以通过示例提交完整答案如果需要。
    猜你喜欢
    • 1970-01-01
    • 2018-11-14
    • 2018-04-23
    • 2019-02-23
    • 1970-01-01
    • 1970-01-01
    • 2012-08-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多