将 csv 文件数据推送到 google 张
Push the csv file data to google sheets
我需要将 csv 文件数据加载到 google 工作表。我使用 gspread 将 csv 导入 google 工作表,但它只能用于个人驱动器而不是团队驱动器。
这是我的下一个方法。
我试图将 csv 文件的内容放入列表,然后从列表中更新 google 工作表的单元格,但出现 429 错误。我怎样才能避免这个错误?
row = 1
column = 1
Fi = []
Fi = open("data.csv",'r')
for value in Fi:
items = value.strip().split(',')
for item in items:
sheet.update_cell(row, column, item)
column +=1
row +=1
column = 1
sheet.update_cells(cell_list)
Fi.close()
这是我得到的错误
gspread.exceptions.APIError: {
"error": {
"code": 429,
"message": "Quota exceeded for quota group 'WriteGroup' and limit 'Write requests per user per 100 seconds' of service 'sheets.googleapis.com' for consumer 'project_number:226307199654'.",
"status": "RESOURCE_EXHAUSTED",
"details": [
{
"@type": "type.googleapis.com/google.rpc.Help",
"links": [
{
"description": "Google developer console API key",
"url": "https://console.developers.google.com/project/<proj_num>/apiui/credential"
}
]
}
]
}
}
每次请求完成时尝试使用休眠功能。由于上述错误,您需要在每次写入请求完成后等待超过 100 秒。
您经常打电话给 update_cells
。
根据 gspread
文档 here
可以批量完成:
cell_list = worksheet.range('A1:C7')
for cell in cell_list:
cell.value = 'O_o'
# Update in batch
worksheet.update_cells(cell_list)
所以,看来您的解决方案是:
Fi = []
Fi = open("data.csv",'r')
items=[]
for value in Fi:
for item in value.strip().split(','):
items.append(item)
cell_list = worksheet.range('A1:ENDRANGE') # according to csv
for cell, item in cell_list, items:
cell.value=item
sheet.update_cells(cell_list)
Fi.close()
我没测试过。
我认为如果您跟踪写入请求并且仅根据每 100 秒分配的配额发送请求,就可以解决这个问题。并使用睡眠功能等待配额在另一个 100 秒后重置。
import time
row = 1
column = 1
requestCount = 0
writeQuota = 100 #This is the limit for write request per 100 seconds
Fi = []
Fi = open("data.csv",'r')
for value in Fi:
items = value.strip().split(',')
for item in items:
if(requestCount == writeQuota):
time.sleep(100)
requestCount = 0
sheet.update_cell(row, column, item)
requestCount += 1
column += 1
row += 1
column = 1
sheet.update_cells(cell_list)
Fi.close()
试试看这样的东西是否有效。还可以调整睡眠时间并仔细检查您的写入配额。
我需要将 csv 文件数据加载到 google 工作表。我使用 gspread 将 csv 导入 google 工作表,但它只能用于个人驱动器而不是团队驱动器。
这是我的下一个方法。
我试图将 csv 文件的内容放入列表,然后从列表中更新 google 工作表的单元格,但出现 429 错误。我怎样才能避免这个错误?
row = 1
column = 1
Fi = []
Fi = open("data.csv",'r')
for value in Fi:
items = value.strip().split(',')
for item in items:
sheet.update_cell(row, column, item)
column +=1
row +=1
column = 1
sheet.update_cells(cell_list)
Fi.close()
这是我得到的错误
gspread.exceptions.APIError: {
"error": {
"code": 429,
"message": "Quota exceeded for quota group 'WriteGroup' and limit 'Write requests per user per 100 seconds' of service 'sheets.googleapis.com' for consumer 'project_number:226307199654'.",
"status": "RESOURCE_EXHAUSTED",
"details": [
{
"@type": "type.googleapis.com/google.rpc.Help",
"links": [
{
"description": "Google developer console API key",
"url": "https://console.developers.google.com/project/<proj_num>/apiui/credential"
}
]
}
]
}
}
每次请求完成时尝试使用休眠功能。由于上述错误,您需要在每次写入请求完成后等待超过 100 秒。
您经常打电话给 update_cells
。
根据 gspread
文档 here
可以批量完成:
cell_list = worksheet.range('A1:C7') for cell in cell_list: cell.value = 'O_o' # Update in batch worksheet.update_cells(cell_list)
所以,看来您的解决方案是:
Fi = []
Fi = open("data.csv",'r')
items=[]
for value in Fi:
for item in value.strip().split(','):
items.append(item)
cell_list = worksheet.range('A1:ENDRANGE') # according to csv
for cell, item in cell_list, items:
cell.value=item
sheet.update_cells(cell_list)
Fi.close()
我没测试过。
我认为如果您跟踪写入请求并且仅根据每 100 秒分配的配额发送请求,就可以解决这个问题。并使用睡眠功能等待配额在另一个 100 秒后重置。
import time
row = 1
column = 1
requestCount = 0
writeQuota = 100 #This is the limit for write request per 100 seconds
Fi = []
Fi = open("data.csv",'r')
for value in Fi:
items = value.strip().split(',')
for item in items:
if(requestCount == writeQuota):
time.sleep(100)
requestCount = 0
sheet.update_cell(row, column, item)
requestCount += 1
column += 1
row += 1
column = 1
sheet.update_cells(cell_list)
Fi.close()
试试看这样的东西是否有效。还可以调整睡眠时间并仔细检查您的写入配额。