Как создать новый лист в определенной папке/каталоге с помощью PyGSheets v2?

Я хочу использовать PyGSheets для создания электронной таблицы в папке Google Диска. Я также хочу иметь возможность установить каталог/папку, в которой лист создается с помощью кода. В частности, я хотел бы ввести строку, похожую на URL-адрес, или даже просто на имя папки.
Я уже ознакомился с документацией PyGSheets и моделью "Электронная таблица". Я не нашел классов, которые принимают имя папки или адрес каталога. Также нет класса, используемого для перемещения листа из одной папки в другую. Возможна ли какая-либо операция с использованием PyGSheets?


По состоянию на 5 мая я использовал обходной путь для решения этой проблемы. Чтобы получить идентификатор папки на моем Диске, я щелкаю правой кнопкой мыши целевую папку и выбираю «Получить общую ссылку» в появившемся меню. Копирую ссылку и вставляю в любой текстовый редактор. Ссылка выглядит так: https://drive.google.com/open?id=9JHS74hgls049J50< /а>. Я копирую случайную строку символов после ключевых слов «id =». Это то, что я указываю в качестве значения, когда создаю папку с помощью PyGSheets:

shtTargetedCreate = con.create("Test Folder",folder="1GwA4W8iv-26BvG48nKnEigYqDL8SpUGK")

Есть ли более эффективный способ сделать это?


person Joachim Rives    schedule 30.04.2019    source источник


Ответы (1)


Ну, похоже, вы поняли, как создать новую электронную таблицу в папке по идентификатору файла, но не нашли, как получить имена/идентификаторы папок из pygsheets или как перемещать листы. (Вы сказали, что создали «папку с помощью PyGSheets, но это просто создает электронную таблицу, верно?)

Это можно сделать с помощью функций DriveAPIWrapper — https://pygsheets.readthedocs.io/en/stable/drive_api.html

Имена/идентификаторы папок:

pygsheets.drive.list(), в вашем случае con.drive.list(), даст список словарей метаданных для всех файлов и папок на диске. Я сделал простую функцию для извлечения только имен папок (ключей) и идентификаторов (значений) в словарь для более простого поиска и использования с методом create:

def folder_id_dict(client):
    folders = {}
    meta_list = client.drive.list()
    for file_meta in meta_list:
        if file_meta['mimeType'] == 'application/vnd.google-apps.folder':
            folders[file_meta['name']] = file_meta['id']
    return folders

#your use:
names = folder_id_dict(con)

Перемещение файлов между папками:

https://pygsheets.readthedocs.io/en/stable/drive_api.html#pygsheets.drive.DriveAPIWrapper.move_file

con.drive.move_file(file_id, old_folder, new_folder, **kwargs)
person rherron    schedule 09.06.2019
comment
Это прекрасно работает! Единственная дополнительная вещь, которую мне нужно было сделать, это поделиться папкой с client_email моей учетной записи службы Google, чтобы иметь возможность ее видеть. - person Thomas Burke; 20.07.2020