【问题标题】:Access public Google drive folder (not from my drive) in Colab?在 Colab 中访问公共 Google 驱动器文件夹(不是来自我的驱动器)?
【发布时间】:2019-06-22 09:28:09
【问题描述】:

我有一个 GoogleDrive 文件夹的公共链接:https://drive.google.com/drive/folders/19RUYQNOzMJEA-IJ3EKKUf0qGyyOepzGk?usp=sharing

我想访问 colab 笔记本中的内容。 我希望任何打开笔记本的人都能够访问该文件夹,因此无需安装我自己的驱动器。 Downloading public files in Google Drive (Python) 等其他答案似乎建议对 ID 进行切片。 我尝试按照说明https://towardsdatascience.com/3-ways-to-load-csv-files-into-colab-7c14fcbdcb92

link= 'https://drive.google.com/drive/folders/19RUYQNOzMJEA-IJ3EKKUf0qGyyOepzGk?usp=sharing'

fluff, id = link.split('=')
print (id)

但是我的 id 只是“分享”

编辑代码仍然不起作用

我已经像这样更改了文件共享的权限

然后运行代码:

from google.colab import auth

auth.authenticate_user()  # must authenticate


'''list all ids of files directly under folder folder_id'''

def folder_list(folder_id):

  from googleapiclient.discovery import build

  gdrive = build('drive', 'v3').files()

  res = gdrive.list(q="'%s' in parents" % folder_id).execute()

  return [f['id'] for f in res['files']]



'''download all files from a gdrive folder to current directory'''

def folder_download(folder_id):

  for fid in folder_list(folder_id):

    !gdown -q --id $fid

link='https://drive.google.com/drive/folders/1I6FwS5qB2bIwoPE4ueu8ZNH3upBqMB7S?usp=sharing'

folder_id="1I6FwS5qB2bIwoPE4ueu8ZNH3upBqMB7S"

folder_download(folder_id)

但得到这个错误:

Permission denied: https://drive.google.com/uc?id=1AiNvRugUOWIthoSdBMBB5p5GLpyj6_Vd
Maybe you need to change permission over 'Anyone with the link'?

但是我已将权限更改为“知道链接的任何人”

编辑 2:确保所有文件夹都处于可共享状态Korakot Chaovavanich 评论之后,我确保每个文件/文件夹都是可共享的:

url 链接指向此文件夹:

里面有这个文件夹:

只有一个文件,也可以共享:

但是运行编辑 1 中提到的代码: 我收到此错误:

Permission denied: https://drive.google.com/uc?id=1AiNvRugUOWIthoSdBMBB5p5GLpyj6_Vd
Maybe you need to change permission over 'Anyone with the link'?

【问题讨论】:

  • id = link.split('?')[0].split('/')[-1]
  • 您已更改“文件夹”,但还不够。您还需要更改其中的每个文件。看到错误是文件(1AiNv..Vd),而不是文件夹
  • @Korakot Chaovavanich 我已经让所有内容都可以共享(参见编辑 2)。是不是我没有以正确的方式分享它?我通过将所有内容都放在:'任何人都可以通过链接查看'来做到这一点。我应该放点别的吗?

标签: python url download google-colaboratory drive


【解决方案1】:

您的文件夹 ID 介于“/”和“?”之间。您可以使用 split 两次或使用 regexp 提取它。

之后,您可能希望列出其中的所有文件。这是gist 示例。关键部分是

'''list all ids of files directly under folder folder_id'''
def folder_list(folder_id):
  from googleapiclient.discovery import build
  gdrive = build('drive', 'v3').files()
  res = gdrive.list(q="'%s' in parents" % folder_id).execute()
  return [f['id'] for f in res['files']]

【讨论】:

  • 好的,所以我必须先挂载我的驱动器,或者如何运行它?我添加了一个我认为你的意思的编辑
  • 你根本不需要挂载。只需调用 auth.authenticate_user()。完整代码参见要点,包括使用 gdown 下载。
  • 我认为我的设置方式存在一些问题?我已经编辑了这个问题,以包括我按照你的要点所做的事情。但我仍然获得许可被拒绝
  • 这行得通 - 正如您所看到的,我获得的权限被拒绝来自您需要传递 ID 的子文件夹。但它仍然下载顶层文件夹的内容,然后传递子文件夹 ID ti 工作。
【解决方案2】:

我刚刚测试的一个解决方案是将您的文件存储在 Google Drive 以外的公共存储库中,然后使用 ! 调用 shell 命令从那里检索文件。下面是从公共 Github 存储库下载文件到 Colab 环境的工作示例代码:

!wget https://raw.githubusercontent.com/heitorsf/pimpom/master/README.md

因此,您将在 Colab 上获得该文件。您可以通过!cat README.md查看。

注意:最好的方法是使用文件“原始”版本的 URL。

【讨论】:

    【解决方案3】:

    只需创建一个从公共文件夹到您的驱动器的快捷方式,然后将您的驱动器加载到 google colab,或者如果您已经连接,则只需更新。

    【讨论】:

      【解决方案4】:

      1)。使用下面给出的代码后,您将获得 google 驱动器中的目录列表,然后您可以使用任何您想使用的文件夹。

      from google.colab import drive
      drive.mount('/content/drive')
      
      import os
      os.listdir('/content/drive/My Drive')
      

      【讨论】:

      • 我想挂载一个 public 文件夹,以便其他人可以从他们的 colab 访问它,这仍然需要访问权限
      猜你喜欢
      • 2021-01-13
      • 1970-01-01
      • 2022-11-29
      • 1970-01-01
      • 1970-01-01
      • 2020-05-17
      • 1970-01-01
      • 1970-01-01
      • 2021-09-01
      相关资源
      最近更新 更多