【问题标题】:Python gspread, how to populate google sheet, dictionaries within listPython gspread,如何填充谷歌表,列表中的字典
【发布时间】:2020-02-27 00:17:02
【问题描述】:

我尝试查看类似问题的答案,但无法使代码正常工作。我无法理解如何在列表中填充类似字典的 gspread。

下面是我要导出的数据结构:

    sheet_data = [{
                "timestamp": "09-04-2019",
                "value": "10.0",
                "company_name": "Xbox",
                "product": "Buy"
                },
                {
                "timestamp": "09-03-2019",
                "value": "2.0",
                "company_name": "something",
                "product": "Sell"
        }]

以下是我已经尝试过并且现在可以使用的方法。我剩下的问题是,我手动输入 cell_range = worksheet.range('A2:D3'),我该怎么做才能将工作表更新为给定数据可用的任何单元格。由于我在 sheet_data 中的数据量会在以后的更新中发生变化。


header = ['timestamp', 'value', 'company_name', 'product']
        worksheet.add_rows(len(sheet_data))
        cell_range = worksheet.range('A2:D3')
        flat_sheet_data = []
        for row in sheet_data:
            for column in header:
                flat_sheet_data.append(row[column])
        for i, cell in enumerate(cell_range):
            cell.value = flat_sheet_data[i]
        worksheet.update_cells(cell_range)

链接到我想使用上述数据结构在电子表格上完成的图像:https://i.stack.imgur.com/EQLEI.png

【问题讨论】:

  • 我可以问你关于你的问题吗?关于my data structure that I want to export:,您想从Google 电子表格中检索值作为sheet_data 的对象吗?但是在您的脚本中,似乎“A2:C10”的范围已更新。那我能问一下你的目标吗?顺便说一句,您能否提供您期望的示例电子表格和示例结果值?我认为这将帮助用户思考解决方案。当然,请删除您的个人信息。顺便问一下,您是否已经能够使用 gspread 获取和放置电子表格的值?
  • @tanaike 是的,我已经可以将值放在电子表格上,使用上面的脚本,它会用“x”填充某些行。我想更新或将上述数据结构推送到谷歌表中。我还附上了一张我想做的图片。
  • 感谢您回复并添加更多信息。您已经能够使用 gspread。你想把sheet_data 放到电子表格中。我可以这样理解。我的理解正确吗?如果我的理解是正确的,我还有一个问题。当我看到你的图片和sheet_data 时,电子表格的标题和sheet_data 的键似乎不同。这个怎么样?
  • @tanaike 是的,您正确理解了一切。标题不同,我想保留我已经在 googlesheet 中定义的标题,但如果需要,我可以将 sheet_data 中的密钥用作标题。
  • 为什么要将row(即代表一行的整个字典)分配给cell.value?你不应该改为cell.value = row['value'] 并遍历需要value 的行吗?然后对其他行做同样的事情,而不是一次做整个块。或者,或者,只需有 4 个赋值语句,按顺序将正确的值分配给正确的单元格 - 但这会有点混乱。

标签: python dictionary google-sheets google-sheets-api gspread


【解决方案1】:
  • 您想将sheet_data 放入电子表格。
  • 您已经能够使用带有 gspread 的 Sheets API 获取和放置值。
  • 从图像中的标题和sheet_data 的键中,“日期”、“公司名称”、“流量”和“产品”分别对应于“时间戳”、“公司名称”、“价值”和“产品”,分别。

我可以像上面那样理解。如果我的理解是正确的,这个答案怎么样?请认为这只是几个可能的答案之一。

流程:

此示例脚本的流程如下。

  1. 准备header_to_key
  2. 创建一个用于放入电子表格的列表。
  3. 使用values_append的方法将创建的列表放入。

示例脚本:

在运行脚本之前,请设置变量。

spreadsheetId = "###"  # Please set the Spreadsheet ID.
sheetName = "Sheet1"  # Please set the sheet name.

sheet_data = [{
    "timestamp": "09-04-2019",
    "value": "10.0",
    "company_name": "Xbox",
    "product": "Buy"
}, {
    "timestamp": "09-03-2019",
    "value": "2.0",
    "company_name": "something",
    "product": "Sell"
}]

header_to_key = {
    'Date': 'timestamp',
    'Company_Name': 'company_name',
    'Traffic': 'value',
    'Product': 'product'
}

client = gspread.authorize(credentials)
spreadsheet = client.open_by_key(spreadsheetId)
worksheet = spreadsheet.worksheet(sheetName)

headers = worksheet.row_values(1)
put_values = []
for v in sheet_data:
    temp = []
    for h in headers:
        temp.append(v[header_to_key[h]])
    put_values.append(temp)
spreadsheet.values_append(sheetName, {'valueInputOption': 'USER_ENTERED'}, {'values': put_values})

注意:

  • 在此示例脚本中,它假设“日期”、“公司名称”、“流量”和“产品”的标题设置为与您的图片一样的电子表格。

参考:

【讨论】:

  • 我能够在我看到这个之前几秒钟解决它(用对我有用的方法更新了我的问题)但是你的答案要好得多,似乎它让我不知道工作表.范围。感谢您的所有帮助,非常感谢您的宝贵时间!
  • @zstar 感谢您的回复。我很高兴你的问题得到了解决。也谢谢你。
【解决方案2】:

以下方法对我有用

gc = gspread.authorize(credentials)
sh = gc.open_by_url("url of the sheet")
ws = sh.worksheet(ws_title)
records = json.loads(sheet_data)
keys = [str(eachvalue) for eachvalue in records.keys()]
values = [str(eachvalue) for eachvalue in records.values()]
Data =[{'range': 'A1:D1','values': [keys],}, {'range': 'A2:D2','values': [values],}]
ws.batch_update(Data);

【讨论】:

    猜你喜欢
    • 2016-08-09
    • 2017-08-25
    • 2014-01-02
    • 1970-01-01
    • 1970-01-01
    • 2017-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多