С gcsfs
вам нужно немного настроить, в частности, открыть объект, похожий на файл, который вы затем сможете прочитать или записать. Пожалуйста, ознакомьтесь с документацией .
import gcsfs
fs = gcsfs.GCSFileSystem(project='my-google-project')
with fs.open('my-bucket/my-file.txt', 'rb') as f:
print(f.read())
Также имейте в виду, что вам может понадобиться пройти аутентификацию для доступа к нужному проекту и его хранилищу. А если ваша программа работает в Google Compute Engine (GCE), виртуальной машине GCE потребуется область действия storage-rw
(или другая область действия, которая подразумевает storage-rw
), а служебной учетной записи потребуется разрешение Storage Object Admin
.
Более типичные способы доступа Python к Google Cloud Storage (GCS) для программы:
- Установите клиентскую библиотеку GCS Python и выполните вызовы к ней. API библиотеки, например, для загрузки файла в блоб GCS (он же объект; самое близкое к файлу). Опять же, вам понадобятся правильные области действия и разрешения. Он не реализует
gs://
pathnames. - Shell для вызова
gsutil
командной строки для копирования локального файла в или из GCS. В этом случае вы предоставляете gs://
путей. (В Python 3 я бы использовал встроенную библиотеку subprocess
для оболочки. В Python 2 я бы использовал библиотеку subprocess32
, установленную из PYPI, которая является версией с той же портированностью библиотека, с исправлениями ошибок.) - Установите
gcsfuse
, запустите ее, чтобы смонтировать корзину GCS (опционально суженную до указанного c "подкаталога") в локальный каталог. Затем читайте и записывайте файлы в этом локальном каталоге.
GCS - это хранилище плоских объектов, а не файловая система. Например, он не поддерживает одновременное чтение и запись нескольких файлов в файл; просто atomi c для чтения или записи большого двоичного объекта.
На самом деле GCS не имеет каталогов, только пути, содержащие символы sla sh. С gcsfuse
вы можете смонтировать корзину с --implicit-dirs
, в этом случае она подделывает каталоги (и работает очень медленно), или же вам нужно иметь «заполнители каталогов» (объекты 0 длины с именами, заканчивающимися на /
). Без --implicit-dirs
он будет создавать заполнители во время определенных операций, но даже не будет видеть «подкаталоги», в которых их нет.
Пожалуйста, прочтите документацию gcsfuse о том, как различается его семантика из файловой системы, даже если gcsfuse
делает все возможное, чтобы сократить разрыв.