Гид по технологиям

Чтение и запись Google Sheets с помощью Python

7 min read Python Обновлено 28 Apr 2026
Python и Google Sheets: читать и писать
Python и Google Sheets: читать и писать

Логотип Python и Google Sheets на экране

Введение

Python прост в изучении и широко используется для автоматизации. Google Sheets часто служит лёгкой базой данных для небольших приложений, отчётов и ETL-процессов. В этой инструкции вы научитесь настроить доступ, безопасно аутентифицироваться и выполнять основные операции чтения/записи.

Ключевые термины в одной строке:

  • gspread: библиотека Python для работы с Google Sheets.
  • Сервисный аккаунт: тип учётных данных Google для серверных приложений.
  • scopes: права доступа, требуемые API.

Google: что нужно подготовить

Перед запуском кода выполните эти шаги в консоли Google Cloud и в самом Google Sheets.

  1. Создайте Google Cloud проект или используйте существующий.
  2. Включите API Google Sheets и Google Drive для этого проекта.
  3. Создайте сервисный аккаунт и сгенерируйте ключ в формате JSON.
  4. Сохраните файл JSON в корне проекта и запомните имя файла.
  5. Откройте таблицу Google Sheets и поделитесь ею с client_email из JSON.

Пример таблицы Google Sheets со списком раллийных автомобилей

Следующие скриншоты иллюстрируют шаги в консоли Google Cloud (для ориентира). Они оставлены в статье как визуальная подсказка — выполнять действия нужно в вашей консоли.

Панель Google Developers Console

Присвоение имени проекту в консоли Google

Включение Google Sheets API

Подтверждение включения API

Раздел учетных данных Google API

Создание учетных данных в Google API

Выбор типа учетной записи — Service account

Детали сервисного аккаунта

Таблица сервисных аккаунтов в консоли

Создание нового ключа для сервисного аккаунта

Выбор формата JSON для ключа

Важно: не публикуйте JSON-файл в публичных репозиториях. Он содержит секреты доступа.

Установка и подготовка Python окружения

  1. Установите Python (Windows: загрузите с python.org; macOS обычно уже установлен).
  2. Создайте виртуальное окружение для проекта:
python -m venv venv
source venv/bin/activate  # macOS/Linux
venv\Scripts\activate    # Windows
  1. Установите необходимые пакеты:
pip install gspread oauth2client
# при необходимости
pip install PyOpenSSL
pip install pandas numpy  # если планируете работать с DataFrame
  1. Проверьте установленные пакеты:
pip freeze
  1. Создайте файл с расширением .py и поместите в папку проекта JSON с ключом сервисного аккаунта.

Базовый код аутентификации и открытия таблицы

Короткий и понятный пример подключения с пояснениями:

from oauth2client.service_account import ServiceAccountCredentials
import gspread

# Области доступа, необходимые для работы с таблицами и файлообменом
scopes = [
    'https://www.googleapis.com/auth/spreadsheets',
    'https://www.googleapis.com/auth/drive'
]

# Замените имя файла на имя вашего JSON ключа
credentials = ServiceAccountCredentials.from_json_keyfile_name("[JSON_key_name].json", scopes)

gc = gspread.authorize(credentials)

# Открываем таблицу по названию (чувствительна к регистру)
sheet = gc.open("Python_MUO_Google_Sheet")
# Получаем лист по имени
worksheet = sheet.worksheet("Sheet1")

Пояснение: ServiceAccountCredentials использует JSON-ключ, чтобы получить токен доступа; gspread затем упрощает вызовы API.

Чтение данных: варианты и примеры

Чтение диапазона ячеек целиком:

all_cells = worksheet.range('A1:C6')
for cell in all_cells:
    print(cell.value)

Чтение и вывод удобочитаемо:

rows = worksheet.get_all_values()
for row in rows:
    print("\t".join(row))

Доступ к одной ячейке по A1-нотации:

val = worksheet.acell('A2').value
print(val)

Доступ по координатам (строка, столбец):

coord = worksheet.cell(5, 3).value
print(coord)

Получить всю строку или столбец:

row = worksheet.row_values(1)
col = worksheet.col_values(2)

Вывод результатов чтения в командной строке

Пример отформатированного вывода в консоли

Запись данных: обновление, добавление и форматирование

Обновление одной ячейки:

worksheet.update_acell('C2', 'Blue')
# или по координатам
worksheet.update_cell(2, 3, 'Blue')

Обновление диапазона:

worksheet.update('A2:B3', [["Not Ford", "Not Lancia"], ["Nothing", "Not"]])

Добавление новой строки (append):

worksheet.append_row(['New', 'Row', 'Values'])

Форматирование (например, сделать заголовок жирным):

worksheet.format('A1:C1', {'textFormat': {'bold': True}})

Совет: используйте batch-операции, когда обновляете много ячеек — это уменьшит число сетевых вызовов и ускорит выполнение.

Практика безопасности и надёжности

Важно: перед массовой записью используйте проверку «safety cell» — специальную ячейку, значение в которой гарантирует ожидаемую структуру таблицы.

Пример простого механизма защиты:

safety = worksheet.acell('B3').value
if safety != 'SAFETY':
    print("Sheet already updated or structure changed. Aborting.")
else:
    worksheet.update_acell('C2', 'Blue')

Рекомендации:

  • Храните JSON-ключ в секрете (используйте секретное хранилище на CI/CD).
  • Ограничьте права сервисного аккаунта: предоставьте доступ только к конкретной таблице.
  • Делайте бэкапы таблицы перед массовыми изменениями.

Обработка ошибок и повторные попытки

При сетевых ошибках используйте стратегию экспоненциальных повторных попыток с ограничением по времени. Для gspread ловите исключения и повторяйте запросы с backoff.

Пример шаблона с retry:

import time
from requests.exceptions import RequestException

max_retries = 5
for attempt in range(1, max_retries + 1):
    try:
        worksheet.update_acell('C2', 'Blue')
        break
    except RequestException as e:
        wait = 2 ** attempt
        print(f"Ошибка сети: {e}. Повтор через {wait} сек.")
        time.sleep(wait)

Интеграция с pandas и numpy

Если вы привыкли работать с DataFrame, gspread можно связать с pandas для удобной обработки данных:

import pandas as pd

rows = worksheet.get_all_records()
df = pd.DataFrame(rows)
# Выполнить преобразования
# Затем записать обратно
worksheet.update([df.columns.values.tolist()] + df.values.tolist())

Этот подход удобен для очистки данных, агрегаций и подготовки отчётов.

Альтернативные подходы и когда они подходят

  1. google-api-python-client — официальная библиотека Google. Подходит, если нужна тонкая настройка API и доступ к широкому спектру Google API.
  2. pygsheets — более современная и удобная обёртка с поддержкой pandas напрямую.
  3. Пользовательская OAuth авторизация (веб/desktop) — когда нужен доступ от имени пользователя, а не сервисного аккаунта.

Когда gspread не подходит:

  • Требуется доступ к редким или расширенным методам Google Drive API, которых нет в gspread.
  • Нужна строгая кастомизация токенов и редкие авторизационные потоки.

Модель мышления: таблица как упрощённая БД

Думайте о Google Sheets как о простой таблице данных с ограничениями:

  • Отлично для прототипов, ад-хок отчётов и малых ETL.
  • Плохо подходит для параллельных транзакций, сложных запросов и больших объёмов данных.

Правило большого пальца: если вам нужен постоянный многопользовательский доступ с транзакциями и сложными запросами — рассмотрите базу данных.

Плейбук: быстрая автоматизация задач

  1. Настройка окружения и ключей (см. разделы выше).
  2. Создание функций в модуле api_sheets.py: connect(), read_range(), write_range(), append_row().
  3. Написание юнит-тестов для функций с mock-объектами.
  4. Настройка CI: хранить секреты в переменных окружения/секретах.
  5. Плановое расписание (cron/Cloud Functions) для запуска задач.

Пример структуры проекта:

project/
  sheets_key.json
  venv/
  api_sheets.py
  main.py
  tests/

Роль-ориентированные контрольные списки

Разработчик:

  • Создал виртуальное окружение и установил зависимости.
  • Написал и протестировал функции чтения/записи.
  • Добавил обработку ошибок и логирование.

Аналитик данных:

  • Подготовил шаблоны DataFrame и маппинг столбцов.
  • Убедился, что структура таблицы стабильна (safety cell).

Системный администратор:

  • Сохранил JSON-ключ в безопасном хранилище.
  • Настроил ограничения доступа сервисного аккаунта.
  • Настроил резервное копирование таблиц.

Критерии приёмки

  • Скрипт подключается к Google Sheets без ошибок по JSON-ключу.
  • Чтение диапазона A1:C6 возвращает ожидаемые значения.
  • Обновление/append происходит корректно и подтверждается чтением.
  • Переустановленные зависимости не ломают функциональность.

План действий при инциденте

  1. Остановка автоматического задания.
  2. Восстановление таблицы из последней резервной копии (если есть).
  3. Проверка валидности JSON-ключа и прав сервисного аккаунта.
  4. Анализ логов: ошибка авторизации, превышение квот, сетевые ошибки.
  5. Если требуется, откат к предыдущей стабильной версии скрипта.

Тест-кейсы и проверки

  1. Подключение с корректным JSON — ожидаемый результат: успешная авторизация.
  2. Подключение с неправильным JSON — ожидаемый результат: исключение авторизации.
  3. Попытка записи в защищённый лист — ожидаемый результат: отказ и лог с ошибкой.
  4. Массовое обновление диапазона — ожидаемый результат: все значения обновлены, нет частичных изменений.

Шпаргалка по методам gspread

  • open(name) — открыть таблицу по имени.
  • worksheet(name) или sheet.get_worksheet(index) — получить лист.
  • get_all_values() — получить все значения как список списков.
  • get_all_records() — получить список словарей.
  • range(a1) / update(range, data) — пакетные операции.
  • acell(‘A1’) / cell(row, col) — доступ к отдельной ячейке.
  • append_row(list) — добавить строку.

Советы по производительности

  • Используйте batch-апдейты для больших объёмов изменений.
  • Минимизируйте количество запросов: объединяйте операции чтения/записи.
  • Кешируйте часто используемые данные локально, если они редко меняются.

Совместимость и миграция

Если вы решите мигрировать с gspread на google-api-python-client или наоборот:

  • Спланируйте тестовую среду с теми же учётными данными.
  • Проверьте поведение при ошибках и лимитах квот.
  • Обновите CI/CD секреты и пермишены.

Безопасность и соответствие приватности

  • Не храните JSON-ключи в публичных репозиториях.
  • Отключайте доступ сервисного аккаунта к другим ресурсам, если он не нужен.
  • Для работы с персональными данными соблюдайте правила локального законодательства и политики конфиденциальности вашей организации.

Короткая аннотация для анонса

Используйте этот короткий текст для рассылки или блога:

Узнайте, как быстро настроить доступ к Google Sheets из Python, безопасно аутентифицироваться с помощью сервисного аккаунта и автоматизировать чтение и запись данных. В статье — готовые шаблоны, чек-листы и примеры кода.

Факто-бокс: что нужно помнить

  • Ключ: JSON сервисного аккаунта.
  • Минимальные области доступа: spreadsheets, drive.
  • Библиотека: gspread (+ oauth2client).
  • Альтернатива: google-api-python-client, pygsheets.

Глоссарий в одну строку

  • gspread: библиотека Python для взаимодействия с Google Sheets.
  • Service Account: машинная учётная запись Google для серверных приложений.
  • Scopes: список прав, которые запрашивает приложение.

Заключение

Вы научились: настраивать Google Cloud проект и сервисный аккаунт, подключаться к Google Sheets из Python с помощью gspread, читать и записывать данные, а также внедрять простые меры безопасности и автоматизации. Далее — автоматизируйте задачи, добавьте тесты и интегрируйте с CI/CD для надёжной работы в продакшне.

Важно: всегда тестируйте операции записи на тестовой копии таблицы и храните резервные копии перед массовыми изменениями.

Примечание: для расширённых сценариев рассмотрите использование официального API google-api-python-client или облачных функций (Cloud Functions) для серверлесс-автоматизаций.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро