Доступ к общедоступной папке диска Google (не с моего диска) в Colab?

У меня есть общедоступная ссылка на папку GoogleDrive: https://drive.google.com/drive/folders/19RUYQNOzMJEA-IJ3EKKUf0qGyyOepzGk?usp=sharing

И я хочу получить доступ к содержимому записной книжки Colab. Я хочу, чтобы любой, кто открывает ноутбук, имел доступ к папке без подключения моего собственного диска. Другие ответы, такие как Загрузка общедоступных файлов на Google Диск (Python), похоже, предлагает разрезать идентификатор. Я пробовал следовать инструкциям 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)

однако мой идентификатор просто "делится"

ИЗМЕНИТЬ КОД ВСЕ ЕЩЕ НЕ РАБОТАЕТ

Я изменил разрешение на совместное использование файлов следующим образом:  изменение разрешения на совместное использование

а затем запустите код:

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: убедитесь, что все папки имеют активный общий доступ. Следуя комментарию Коракот Чаоваванич, я убедился, что каждый файл / папка является общедоступным:

URL-ссылка указывает на эту папку:  link share 1

внутри него есть эта папка:  link share 2

в котором есть только один файл, также доступный для совместного использования:  link share 3

однако при запуске кода, упомянутого в EDIT 1: я получаю эту ошибку:

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

person David 8    schedule 22.06.2019    source источник
comment
id = link.split ('?') [0] .split ('/') [- 1]   -  person korakot    schedule 23.06.2019
comment
Вы изменили «папку», но этого недостаточно. Вам также нужно изменить каждый файл в нем. Смотрите, что ошибка относится к файлу (1AiNv..Vd), а не к папке   -  person korakot    schedule 24.06.2019
comment
@Korakot Chaovavanich Я сделал все доступным для общего доступа (см. РЕДАКТИРОВАНИЕ 2). это то, что я не делюсь этим должным образом? Я сделал это, поместив все так: «любой может просматривать по ссылке». я должен поставить что-нибудь еще?   -  person David 8    schedule 24.06.2019


Ответы (3)


Ваш folder_id находится между '/' и '?'. Вы можете использовать split дважды или использовать регулярное выражение для его извлечения.

После этого вы можете захотеть перечислить все файлы внутри. Вот пример 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']]
person korakot    schedule 23.06.2019
comment
хорошо, так что мне нужно сначала смонтировать свой диск, или как мне его запустить? Я добавил правку, о которой я думаю, вы имеете в виду - person David 8; 23.06.2019
comment
Вам вообще не нужно садиться. Просто вызовите auth.authenticate_user (). Полный код, включая загрузку с помощью gdown, см. В gist. - person korakot; 23.06.2019
comment
Думаю, есть проблема с тем, как я его настраиваю? Я отредактировал вопрос, чтобы включить в него то, что я сделал в соответствии с вашей сутью. Но мне все еще отказывают в разрешении - person David 8; 23.06.2019

Решение, которое я только что протестировал, заключается в том, чтобы хранить ваши файлы в общедоступном репозитории, отличном от Google Диска, а затем использовать ! для вызова команды оболочки и извлекать файл оттуда. Вот и рабочий пример кода для загрузки файла из общедоступного репозитория Github в среду Colab:

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

Таким образом, у вас будет файл, доступный на Colab. Вы можете проверить это с помощью !cat README.md.

Примечание: лучший способ сделать это - использовать URL-адрес «необработанной» версии файла.

person heitorsf    schedule 31.10.2019

1). После использования кода, приведенного ниже, вы получите список каталогов на вашем диске Google, затем вы можете использовать папку в зависимости от того, что хотите использовать.

from google.colab import drive
drive.mount('/content/drive')

import os
os.listdir('/content/drive/My Drive')
person Rahul charan    schedule 22.06.2019
comment
Я хочу смонтировать общедоступную папку, чтобы любой другой мог получить к ней доступ из своей папки, для этого все равно потребуется доступ - person David 8; 22.06.2019