Чтение и запись файлов CSV и других форматов в облачное хранилище Google с Pandas - PullRequest
0 голосов
/ 25 января 2020
def get_config_files(self):
       dict_path = 'word.pkl'
       self.kw_ns = ConfigParser()
       self.kw_ns.add_section('Paths')
       self.kw_ns.set('Paths','new_df1','gs://'+filepath, encoding='utf-8')
       self.kw_ns.set('Paths','dictionary','gs://'+dict_path)
       new_df1 =  pd.read_csv(self.kw_ns.get('Paths','new_df1'))
       dict = pickle.load(open(self.abs_path+self.kw_ns.get('Paths','dictionary'), 'rb'))

Я не смог прочитать ни файл csv, ни файл pickle, так как он выдает ошибку "файл не найден". У меня pandas версия 0.25 и gcsfs установлены и импортированы. Любые указатели на то, как это может быть достигнуто

1 Ответ

2 голосов
/ 26 января 2020

С 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) для программы:

  1. Установите клиентскую библиотеку GCS Python и выполните вызовы к ней. API библиотеки, например, для загрузки файла в блоб GCS (он же объект; самое близкое к файлу). Опять же, вам понадобятся правильные области действия и разрешения. Он не реализует gs:// pathnames.
  2. Shell для вызова gsutil командной строки для копирования локального файла в или из GCS. В этом случае вы предоставляете gs:// путей. (В Python 3 я бы использовал встроенную библиотеку subprocess для оболочки. В Python 2 я бы использовал библиотеку subprocess32, установленную из PYPI, которая является версией с той же портированностью библиотека, с исправлениями ошибок.)
  3. Установите gcsfuse, запустите ее, чтобы смонтировать корзину GCS (опционально суженную до указанного c "подкаталога") в локальный каталог. Затем читайте и записывайте файлы в этом локальном каталоге.

GCS - это хранилище плоских объектов, а не файловая система. Например, он не поддерживает одновременное чтение и запись нескольких файлов в файл; просто atomi c для чтения или записи большого двоичного объекта.

На самом деле GCS не имеет каталогов, только пути, содержащие символы sla sh. С gcsfuse вы можете смонтировать корзину с --implicit-dirs, в этом случае она подделывает каталоги (и работает очень медленно), или же вам нужно иметь «заполнители каталогов» (объекты 0 длины с именами, заканчивающимися на / ). Без --implicit-dirs он будет создавать заполнители во время определенных операций, но даже не будет видеть «подкаталоги», в которых их нет.

Пожалуйста, прочтите документацию gcsfuse о том, как различается его семантика из файловой системы, даже если gcsfuse делает все возможное, чтобы сократить разрыв.

...