首页 > 解决方案 > 如何指定 gspread 在运行 import_csv 函数以分隔字段时使用的分隔符?

问题描述

我正在编写一个|用作分隔符的 .csv 文件。我希望能够在运行函数时指定它import_csv()。我怎样才能做到这一点?为此,我必须使用 gspread 替代品吗?Tbh 我只需要一个代码示例。

标签: python-3.xgoogle-sheetsgoogle-sheets-apigspread

解决方案


我相信你的目标如下。

  • 您想使用 gspread 将 CSV 数据放入 Google 电子表格。
  • 您想通过提供分隔符来放置 CSV 数据,例如|.
  • 您已经能够使用 Sheets API 获取和放置 Google 电子表格的值。

问题和解决方法:

当我看到 gspread 的脚本时,似乎import_csv(file_id, data)使用 Drive API 放置 CSV 数据。Ref使用 Drive API 时,当前阶段不能手动设置分隔符。

因此,在这个答案中,作为一种解决方法,我想建议使用 Sheets API 中的 batchUpdate 方法来实现您的目标。示例脚本如下。

示例脚本:

spreadsheetId = "###" # Please set the Spreadsheet ID.
sheetName = "Sheet1" # Please set the sheet name you want to put the CSV data.
delimiter = "|" # Please set the delimiter.
csv = open('filename.csv', 'r').read() # Please set the CSV data.

client = gspread.authorize(credentials)
spreadsheet = client.open_by_key(spreadsheetId)
sheet = spreadsheet.worksheet(sheetName)
body = {
    "requests": [
        {
            "pasteData": {
                "data": csv,
                "delimiter": delimiter,
                "coordinate": {
                    "sheetId": sheet.id
                }
            }
        }
    ]
}
spreadsheet.batch_update(body)
  • 此脚本将 CSV 数据Sheet1放入spreadsheetId.
  • 在此脚本中,aboutclient请将其用于您使用 gspread 的实际脚本。

参考:

添加:

从您的以下回复中,

实现它时,它会抛出错误:TypeError: Object of type bytes is not JSON serializable对于变量body

我担心 的值csv = open('filename.csv', 'r').read()可能是由于您当前问题的原因。所以,我想再添加一个示例脚本。在此示例脚本中,脚本中直接使用了 CSV 数据。

示例脚本:

spreadsheetId = "###" # Please set the Spreadsheet ID.
sheetName = "Sheet1" # Please set the sheet name you want to put the CSV data.
delimiter = "|" # Please set the delimiter.

csv = """a1|b1|c1|d1|e1
a2|b2|c2||e2
a3|b3||d3|e3
"""

client = gspread.authorize(credentials)
spreadsheet = client.open_by_key(spreadsheetId)
sheet = spreadsheet.worksheet(sheetName)
body = {
    "requests": [
        {
            "pasteData": {
                "data": csv,
                "delimiter": delimiter,
                "coordinate": {
                    "sheetId": sheet.id
                }
            }
        }
    ]
}
spreadsheet.batch_update(body)
  • 在此示例脚本中, 的值csv作为 的分隔符放入电子表格中|

推荐阅读