Невозможно прочитать CSV-файл, загруженный в корзину облачного хранилища Google.

Цель - прочитать CSV-файл, загруженный в облачное хранилище Google.

Среда - Запустите блокнот Jupyter, используя экземпляр SSH на главном узле. Используя python на ноутбуке Jupyter, пытаюсь получить доступ к простому CSV-файлу, загруженному в облачное хранилище Google.

Подходы -

1-й подход - написать простую программу на Python

Написал следующую программу

import csv
f = open('gs://python_test_hm/train.csv' , 'rb' ) 
csv_f = csv.reader(f)
for row in csv_f
     print row

Результаты - Сообщение об ошибке "Нет такого файла или каталога"

2-й подход - с помощью пакета gcloud попытался получить доступ к файлу train.csv. Пример кода показан ниже. Ниже код не фактический код. Файл в облачном хранилище Google в моей версии кода назывался "gs:///Filename.csv". Результаты - сообщение об ошибке "Нет такого файла или каталога"

Загрузить данные из CSV

import csv
from gcloud import bigquery
from gcloud.bigquery import SchemaField
client = bigquery.Client()
dataset = client.dataset('dataset_name')
dataset.create()  # API request

SCHEMA = [
    SchemaField('full_name', 'STRING', mode='required'),
    SchemaField('age', 'INTEGER', mode='required'),
 ]
table = dataset.table('table_name', SCHEMA)
table.create()

with open('csv_file', 'rb') as readable:
    table.upload_from_file(
        readable, source_format='CSV', skip_leading_rows=1)

3-й подход -

import csv
import urllib

url = 'https://storage.cloud.google.com/<bucket>/train.csv'


response = urllib.urlopen(url)
cr = csv.reader(response)
print cr

for row in cr:
    print row

Результаты. Приведенный выше код не приводит к возникновению ошибок, но отображает содержимое XML страницы Google, как показано ниже. Я заинтересован в просмотре данных CSV-файла поезда.

['<!DOCTYPE html>']
['<html lang="en">']
['  <head>']
['  <meta charset="utf-8">']
['  <meta content="width=300', ' initial-scale=1" name="viewport">']
['  <meta name="google-site-verification" content="LrdTUW9psUAMbh4Ia074-   BPEVmcpBxF6Gwf0MSgQXZs">']
['  <title>Sign in - Google Accounts</title>']

Может ли кто-то пролить свет на то, что может быть здесь не так, и как мне достичь своей цели? Ваша помощь высоко ценится.

Большое спасибо за Вашу помощь!

2 ответа

Я предполагаю, что вы используете ноутбук Jupyter, работающий на компьютере в Google Cloud Platform (GCP)? Если это так, у вас уже будет запущен Google Cloud SDK на этом компьютере (по умолчанию).

С этой настройкой у вас есть 2 простых варианта работы с Google Cloud Storage (GCS):

  • Используйте команды gcloud/gsutil в Jupyter

    Запись в GCS: gsutil cp train.csv gs://python_test_hm/train.csv

    Чтение из GCS:gsutil cp gs://python_test_hm/train.csv train.csv

  • Использовать библиотеку google-cloud python

    Запись в GCS:

from google.cloud import storage
client = storage.Client()
bucket = client.get_bucket('python_test_hm')
blob = bucket.blob('train.csv')
blob.upload_from_string('this is test content!')

Чтение из GCS:

from google.cloud import storage
client = storage.Client()
bucket = client.get_bucket('python_test_hm')
blob = storage.Blob('train.csv', bucket)
content = blob.download_as_string()

Страница входа, которую получает ваше приложение, на самом деле не является объектом - это страница перенаправления аутентификации, которая, при взаимодействии с ней, продолжит обслуживать объект. Вам следует ознакомиться с документацией в облачном хранилище, чтобы узнать, как работает аутентификация, и посмотреть детали аутентификации для любой библиотеки или средств, которые вы используете для доступа к корзине / объекту.