· 3 years ago · Jan 19, 2022, 12:30 PM
1# полезные ссылки
2# Google Colab: import data from google drive as pandas dataframe: https://www.javacodemonk.com/google-colab-import-data-from-google-drive-as-pandas-dataframe-079a3609
3# Работаем с API Google Drive с помощью Python: http://datalytics.ru/all/rabotaem-s-api-google-drive-s-pomoschyu-python/
4# Introduction to Google Drive API: https://developers.google.com/drive/api/v3/about-sdk
5# google-auth user guide: https://google-auth.readthedocs.io/en/master/user-guide.html
6# PyDrive’s documentation: https://pythonhosted.org/PyDrive/
7# Introduction to Google Drive API: https://developers.google.com/drive/api/v3/about-sdk
8
9# импортируем пандас для работы с таблицами
10import pandas as pd
11# импортируем модуль GoogleAuth из библиотеки pydrive для прохождения аутентификации в гуглклауд нашего сервисного приложения
12from pydrive.auth import GoogleAuth
13# импоритруем модуль GoogleDrive из библиотеки pydrive для работы с диском
14from pydrive.drive import GoogleDrive
15# импортируем ServiceAccountCredentials для работы с авторизацией в гуглклауд !pip install oauth2client
16from oauth2client.service_account import ServiceAccountCredentials
17
18# создаем объект GoogleAuth
19gauth = GoogleAuth()
20
21# Scope — это перечень возможностей, которыми будет обладать сервис, созданный в скрипте .
22# В данном случае указанный scope позволит смотреть, редактировать, создавать и удалять файлы с диска
23scope = ["https://www.googleapis.com/auth/drive"]
24
25# авторизуемся в гуглклауд с помощью json файла с ключами авторизации для сервисного приложения
26# , а также заданного выше Scope
27gauth.credentials = ServiceAccountCredentials.from_json_keyfile_name(r"C:\Users\sport\R_Py_scripts\ЧтениеAPI_ch6\gd_to_pq.json", scope)
28
29# создаем объект GoogleDrive
30drive = GoogleDrive(gauth)
31
32# если хотим посмотреть id title и mimetype всех доступных нашему приложению файлов и папок
33all_files_and_folders_List = drive.ListFile({}).GetList() # получили список всех файлов и папок доступных нашему приложению в гуглдрайве
34keys = ['id', 'title', 'mimeType'] # определили списко атрибутов файлов и папок , которые мы хотим вывести на печать
35for i in all_files_and_folders_List: # в цикле берем каждый файл/папку
36 for key in keys: # для каждого файла/папки извлекаем название атрибута и значение
37 print(f'{key} = {i.attr["metadata"].get(key)} , ', end='')
38 print()
39
40# если хотим получить список файлов внутри папки, к которой у нашего приложения есть доступ используем метод ListFile у объекта drive
41# параметры запроса q указанные внутри ListFile можно посмотреть тут: https://developers.google.com/drive/api/v3/search-files
42folder_id = '1J5RaiambhevWheG2uYTis3hXd0CvFMkf' # указываем google id папки которую хотим посмотреть и которая доступна для нашего приложения
43gg = f"'{folder_id}' in parents and trashed=false" # пишем параметр запроса с указанием id нашей папки
44file_list = drive.ListFile({'q': gg}).GetList() # здесь получаем список файлов/папок внутри нашей головной папки с айдишником folder_id
45# в цикле выводим title и id каждого файла/папки внутри нашей главной папки
46for f in file_list:
47 print('title: %s, id: %s' % (f['title'], f['id']))
48
49# Создаем объект GoogleDriveFile с нужным нам file_id с помощью метода CreateFile у объекта GoogleDrive.
50file_id = '1B0kqT23cKwnvkqJnwocuBVXiw_20cN6l'
51file = drive.CreateFile({'id': file_id})
52# теперь , когда мы получили в переменной file объект GoogleDriveFile с нужным нам файлом ,можно получить содержание этого файла с помощью метода GetContentFile
53# и сразу назвать этот файл test.xlsx
54file.GetContentFile('test.xlsx')
55
56# создаем объект файла эксель в пандасе
57xlsx_file = pd.ExcelFile('test.xlsx')
58# получаем списко листов
59ws = xlsx_file.sheet_names
60# создаем объединенный датафрейм из всех листов
61df = pd.concat(pd.read_excel('test.xlsx', sheet_name=ws))
62