使用 Python 从 Google Drive / Workspace 下载电子表格

2024-02-10

您能否生成一个 Python 示例,说明如何下载给定密钥和工作表 ID 的 Google Sheets 电子表格(gid)?我不能。

我已经搜索了 API 的版本 1、2 和 3。我运气不好,我无法弄清楚他们复杂的类似 ATOM 的 feed API,gdata.docs.service.DocsService._DownloadFileprivate 方法说我未经授权,我不想自己编写整个 Google 登录身份验证系统。由于沮丧,我快要捅自己的脸了。

我有一些电子表格,我想像这样访问它们:

username = '[email protected] /cdn-cgi/l/email-protection'
password = getpass.getpass()

def get_spreadsheet(key, gid=0):
    ... (help!) ...

for row in get_spreadsheet('5a3c7f7dcee4b4f'):
    cell1, cell2, cell3 = row
    ...

请保佑我的面子。


更新1:我尝试过以下方法,但没有组合Download() or Export()似乎有效。 (文档为DocsService here http://gdata-python-client.googlecode.com/svn/trunk/pydocs/gdata.docs.service.html)

import gdata.docs.service
import getpass
import os
import tempfile
import csv

def get_csv(file_path):
  return csv.reader(file(file_path).readlines())

def get_spreadsheet(key, gid=0):
  gd_client = gdata.docs.service.DocsService()
  gd_client.email = '[email protected] /cdn-cgi/l/email-protection'
  gd_client.password = getpass.getpass()
  gd_client.ssl = False
  gd_client.source = "My Fancy Spreadsheet Downloader"
  gd_client.ProgrammaticLogin()

  file_path = tempfile.mktemp(suffix='.csv')
  uri = 'http://docs.google.com/feeds/documents/private/full/%s' % key
  try:
    entry = gd_client.GetDocumentListEntry(uri)

    # XXXX - The following dies with RequestError "Unauthorized"
    gd_client.Download(entry, file_path)

    return get_csv(file_path)
  finally:
    try:
      os.remove(file_path)
    except OSError:
      pass

The https://github.com/burnash/gspread https://github.com/burnash/gspread库是一种更新、更简单的与 Google Spreadsheets 交互的方式,而不是旧的答案表明gdata该库不仅级别太低,而且过于复杂。

您还需要创建并下载(JSON 格式)服务帐户密钥:https://console.developers.google.com/apis/credentials/serviceaccountkey https://console.developers.google.com/apis/credentials/serviceaccountkey

以下是如何使用它的示例:

import csv
import gspread
from oauth2client.service_account import ServiceAccountCredentials

scope = ['https://spreadsheets.google.com/feeds']
credentials = ServiceAccountCredentials.from_json_keyfile_name('credentials.json', scope)

docid = "0zjVQXjJixf-SdGpLKnJtcmQhNjVUTk1hNTRpc0x5b9c"

client = gspread.authorize(credentials)
spreadsheet = client.open_by_key(docid)
for i, worksheet in enumerate(spreadsheet.worksheets()):
    filename = docid + '-worksheet' + str(i) + '.csv'
    with open(filename, 'wb') as f:
        writer = csv.writer(f)
        writer.writerows(worksheet.get_all_values())
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Python 从 Google Drive / Workspace 下载电子表格 的相关文章

随机推荐

  • 自定义 shebang 的 VSCode 语法高亮显示

    在工作中 我们在自定义环境下运行 python 因此我们使用非标准的 shebang 我测试过VSCode可以识别python文件without py 扩展名 如果他们有 shebang usr bin env python or usr
  • 使用 vue.js 和 vuetify 进行服务器端表单验证

    我看到了很多有关使用 Vuetify 进行客户端验证的文档 但发现很难找到有关 vuetify 和 vue 的服务器端验证消息的文档 PROBLEM 我有这个组件
  • 将数组组分组为单独的子数组组[重复]

    这个问题在这里已经有答案了 我有一个带有字符串的 JS 数组 例如 let a a a a b c c b b b d d e e e 我需要比较数组内的重复字符串 如果存在重复字符串 它将像这样分隔 a a a b c c b b b d
  • PHP 中先调用父构造函数再调用子构造函数

    我想知道是否可以在 PHP 中继承子代的 construct 之前调用父代的 construct Example class Tag construct Called first class Form extends Tag constru
  • MySQL:GROUP_CONCAT 与 LEFT JOIN

    我在使用 MySQL 的 GROUP CONCAT 函数时遇到问题 我将使用一个简单的帮助台数据库来说明我的问题 CREATE TABLE Tickets id INTEGER NOT NULL PRIMARY KEY requester
  • Python 多处理似乎不使用多个核心

    我想使用 Python 多重处理来运行预测模型的网格搜索 当我查看核心使用情况时 它似乎总是只使用一个核心 知道我做错了什么吗 import multiprocessing from sklearn import svm import it
  • 如何从Python开始计算下个月的38天

    例如 让我们考虑发票日期 09 11 2021 但是 payment period 为 38 天 那么它应该从 1 12 2021 开始到 7 01 2022 因为 12 月有 31 天 那么 due date 将是 7 01 2022 发
  • 使用nginx和gunicorn在django中通过ip限制对管理url的访问

    我试图通过在 nginx 中使用简单的基于主机的访问控制来限制对 django 应用程序管理部分的访问 不幸的是 nginx 似乎不遵守配置请求 这是我在 nginx 中这个特定部分的设置 gunicorn setup location p
  • C++:将指针变量传递给函数

    我有一个类节点 class Node public int item Node nextLink 在函数外部我声明一个 Node 指针 Node newNode 然后 我将此指针传递给函数 foo void foo Node node no
  • 如何在 Pandas 数据框中选择基于行的类别

    这确实微不足道 但不敢相信我已经闲逛了一个小时 仍然可以找到答案 所以在这里 df pd DataFrame cats a b vals 1 2 df cats df cats astype category df 我的问题是如何选择 ca
  • 读取接收和发送的网络流量字节

    在 Objective C 中获取网络流量发送和接收字节的最简单方法是什么 这并不容易 而且它来自 C 而不是 Objective C 但是您需要的所有信息都存储在返回给您的接口地址的 ifa data 字段中获取ifaddrs 3 您可以
  • Google 地图 API 密钥警报

    我的 Google 地图 API 密钥有问题 我收到一条警报说 This web site needs a different Google Maps API key 当我按 确定 收到警报时 地图正在加载并且工作正常 同样的问题已经发布
  • 如何向 Python shell 添加制表符补全?

    当使用启动 django 应用程序时python manage py shell 我得到一个 InteractiveConsole shell 我可以使用制表符完成等 Python 2 5 1 r251 54863 Apr 15 2008
  • Rails image_tag 旋转图像

    我使用亚马逊的 S3 进行图像存储 并配置了载波和雾 图像似乎存储正确 但是当我有 肖像 图像 宽度小于高度 时 它无法正确显示 而是将图像旋转到其一侧 任何正确方向的指示将不胜感激 上传者 image uploader rb class
  • C/C++ 处理程序 SIGFPE 是什么?

    好吧 我搜索了有关 SIGFPE 的文章 然后我写了一些测试 但它的行为很奇怪 那我只好在这里发帖寻求帮助了 GCC G 或 ISO C 是否明确定义了除以零会发生什么 1 我搜索了这篇文章 除以零不会抛出 SIGFPE https sta
  • 在 swift 3 中以编程方式设置 UIImageView AspectRatio 约束

    我在故事板中有一个 UIImageView 其 AspectRatio 为 1 1 在某些情况下我想在 ViewController 中以编程方式更改为 2 1 我在 ViewController 中创建该约束的引用 但无法设置该约束 您可
  • 使用引导工具提示进行 Javascript 验证

    当验证返回 false 时 我在启动输入字段的引导工具提示时遇到问题 更多细节 我有想法用 javascript 函数验证我的表单 这工作得很好 但是当验证错误时一定会发生一些事情 我正在考虑引导工具提示 简单 易于控制 现在对我来说是最好
  • Django ModelChoiceField 允许创建对象

    姜戈的ModelChoiceField https docs djangoproject com en 1 8 ref forms fields django forms ModelChoiceField是从模型派生表单时用于外键的默认表单
  • 当使用 unicorn 启动 Rails 时,Nginx 失败(13:权限被拒绝)

    我的 Rails 应用程序在服务器上运行Unicorn and Nginx 但是在配置Nginx并启动它之后 我收到错误 2015 08 03 15 43 44 crit 13951 0 1 stat home ec2 user apps
  • 使用 Python 从 Google Drive / Workspace 下载电子表格

    您能否生成一个 Python 示例 说明如何下载给定密钥和工作表 ID 的 Google Sheets 电子表格 gid 我不能 我已经搜索了 API 的版本 1 2 和 3 我运气不好 我无法弄清楚他们复杂的类似 ATOM 的 feed