Выполнение команд Google Cloud Shell из jupyter - PullRequest
0 голосов
/ 01 марта 2019

Мне нужно ежедневно выгружать файл с FTP в Google Cloud Storage.Мне удалось сделать это в Python, загрузив файл с FTP и загрузив в Google Cloud Storage, но он кажется слишком тяжелым.Итак, мне любопытно, можно ли это сделать, выполняя команды в Google Cloud Shell, или есть другие возможные решения, чтобы сделать это более оптимальным способом.

from gcloud import storage
from oauth2client.service_account import ServiceAccountCredentials
import os

ftp = ftplib.FTP("ftp_url")
ftp.login('login', 'password')
ftp.cwd("/")


with open('file', 'wb') as f:
    ftp.retrbinary('RETR ' + 'file', f.write)

credentials = ServiceAccountCredentials.from_json_keyfile_dict(
    credentials_dict
)

client = storage.Client(credentials=credentials, project='project_id')

bucket = client.get_bucket('bucket')
blob = bucket.blob('file')
blob.upload_from_filename('file')

1 Ответ

0 голосов
/ 01 марта 2019

Возможно, вы могли бы использовать "Cloud Storage FUSE" для монтирования сегментов Cloud Storage в качестве файловых систем непосредственно на вашем FTP-сервере, чтобы помочь в решении проблемы, описанной в описании этого вопроса.

Теперь, отвечая на заголовок вопроса, вы можете использовать этот код в качестве примера:

Pip Install:

!pip install google-cloud
!pip install google-api-python-client
!pip install oauth2client
!pip install google-cloud-bigquery

Код:

import subprocess
import logging
from google.cloud import storage

logger = logging.Logger('catch_all')

def execute_bash(parameters):
    try:
        return subprocess.check_output(parameters)
    except Exception as e: 
       logger.error(e) 
       logger.error('ERROR: Looking in jupyter console for more information')

def example_list_bucket_gcs():
    list_bucket = execute_bash(['gsutil', 'ls']).decode("utf-8").split('\n')
    for bucket in list_bucket:
        print(bucket)

def example_list_bucket_api(client_gcs):
    list_bucket = client_gcs.list_buckets()
    for bucket in list_bucket:
        print(bucket.name)

JSON_FILE_NAME = 'sa_bq.json'
client_gcs = storage.Client.from_service_account_json(JSON_FILE_NAME)
example_list_bucket_api(client_gcs)
example_list_bucket_gcs()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...