Pu sh данные CSV-файла в Google листов - PullRequest
0 голосов
/ 10 февраля 2020

Мне нужно загрузить данные csv-файла в листы Google. Я использовал gspread для импорта csv в гугл листы, но он может работать только с личным диском, но не с командным.

Вот мой следующий подход.

Я попытался поместить содержимое файла 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"
          }
        ]
      }
    ]
  }
}

Ответы [ 3 ]

1 голос
/ 10 февраля 2020

Я думаю, что это можно решить, если вы отслеживаете запросы на запись и отправляете запросы только в соответствии с квотой, выделенной на 100 сек. И используя функцию ожидания, чтобы дождаться сброса квоты после очередного 100se c.

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()

Попробуйте и проверьте, работает ли что-то подобное. Также поиграйте со временем сна и дважды проверьте квоту записи.

0 голосов
/ 10 февраля 2020

Вы часто звоните на update_cells. В соответствии с gspread документацией здесь

вы можете сделать это в пакетном режиме:

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()

Я не проверял.

0 голосов
/ 10 февраля 2020

Попробуйте использовать функцию сна каждый раз, когда запрос сделан. как ошибка выше, вам нужно подождать более 100 секунд после каждого запроса на запись.

...