Copier les fichiers S3 de Python vers GCS à l'aide de GSUtil

Lors du transfert de données de s3 vers Google Cloud Storage à l'aide de Python, j'ai déjà écrit les deux méthodes suivantes, mais si vous utilisez gsutil, vous pouvez copier directement de s3 vers Google Cloud Storage sans passer par votre propre serveur. C'est pratique parce que vous pouvez le faire.

fichier de configuration gsutil

Reportez-vous à la Documentation et créez un fichier de configuration à lire lorsque GSUtil est exécuté. Au minimum, vous avez besoin de [Credentials] et [GS Util].

[Credentials]
gs_service_key_file = /path.to/sample-KEYFILE.p12
gs_service_client_id = [email protected]
aws_access_key_id = AXXXXXXXXXXXXXXXXXXX
aws_secret_access_key = sampleawssecretaccesskey1234

[Boto]
https_validate_certificates = True

[GSUtil]
content_language = ja
default_api_version = 2
default_project_id = sampleproject-994

Exécuter des commandes depuis Python

Il y a ʻos.system, commandes et sous-processus pour exécuter des commandes, mais il est recommandé d'utiliser sous-processus`.

ʻOs.systemetcommandes` sont obsolètes

os.system

Le module de sous-processus fournit des fonctionnalités plus puissantes pour exécuter de nouveaux processus et obtenir des résultats. Il est recommandé d'utiliser le module de sous-processus au lieu de cette fonction. [^ 1]

commands

Obsolète dans la version 2.6: le module de commandes a été supprimé dans Python 3.0. Utilisez plutôt le module de sous-processus. [^ 2]

Utilisez subprocess

import os
import subprocess
import shlex

BOTO_PATH = '/path.to/boto.ini'

cmd = 'gsutil cp s3://bucket/name gs://bucket/name'

popen = subprocess.Popen(
    shlex.split(cmd),
    stdout=subprocess.PIPE,
    env={'BOTO_PATH': BOTO_PATH, 'PATH': os.getenv('PATH')})

output = popen.communicate()[0]

print output

Le point est la spécification de BOTO_PATH. Normalement, gsutil est exécuté en regardant le fichier de configuration appelé .boto dans le répertoire de base par défaut, mais si vous spécifiez les variables d'environnement BOTO_PATH et BOTO_CONFIG, il ira au fichier spécifié ici.

Puisque subprocess.Popen peut spécifier une variable d'environnement dans l'argument ʻenv, spécifiez'BOTO_PATH 'dans la clé de dict et mettez le chemin du fichier de configuration dans la valeur. Lors de la spécification de ʻenv, toutes les variables d'environnement nécessaires doivent être données, donc "PATH" est également spécifié.

Si vous donnez> env comme valeur spécifique, vous devez donner toutes les variables nécessaires pour exécuter le programme. Pour effectuer un assemblage côte à côte sous Windows, env doit inclure le SystemRoot correct. [^ 3]

Recommended Posts

Copier les fichiers S3 de Python vers GCS à l'aide de GSUtil
Copie de fichiers directement d'Amazon EC2 (Amazon Linux) vers S3
Copiez récursivement les fichiers du répertoire directement sous le répertoire en utilisant Python
De Python à l'utilisation de MeCab (et CaboCha)
Vider les tables BigQuery dans GCS à l'aide de Python
Copier des données d'Amazon S3 vers Google Cloud Storage avec Python (boto)
Je souhaite envoyer un e-mail depuis Gmail en utilisant Python.
Changements de Python 3.0 à Python 3.5
Changements de Python 2 à Python 3.0
Notification PUSH de Python vers Android à l'aide de l'API de Google
[Python] Local → Procédure de téléchargement de fichiers vers S3 (boto3)
Méthodes MessagePack-Call Python (ou Python vers Ruby) à partir de Ruby à l'aide de RPC
Comment télécharger des fichiers depuis Selenium of Python dans Chrome
Récupérer des fichiers depuis Linux en utilisant paramiko et scp [Python]
Requête de Python vers Amazon Athena (à l'aide du profil nommé)
Aplatir à l'aide du rendement Python de
Publier de Python vers Slack
[S3] CRUD avec S3 utilisant Python [Python]
Flirter de PHP à Python
Anaconda mis à jour de 4.2.0 à 4.3.0 (python3.5 mis à jour vers python3.6)
Commencez à Selenium en utilisant python
Passer de python2.7 à python3.6 (centos7)
Connectez-vous à sqlite depuis python
Conversion de Pandas DataFrame en System.Data.DataTable à l'aide de Python pour .NET
Autoriser Python à sélectionner la chaîne de caractères du fichier d'entrée dans le dossier
[Python] Exportez régulièrement de CloudWatch Logs vers S3 avec Lambda
Appelez Matlab depuis Python pour optimiser
Comment installer Python à l'aide d'Anaconda
Remarques sur l'utilisation de MeCab depuis Python
Publication de Python sur la chronologie Facebook
Comment obtenir des abonnés et des abonnés de Python à l'aide de l'API Mastodon
[Lambda] [Python] Publier sur Twitter depuis Lambda!
[python] Script de copie pour générer un journal de copie
Connectez-vous à la base de données utf8mb4 à partir de python
Python (de la première fois à l'exécution)
Comment accéder à wikipedia depuis python
Python pour passer d'une autre langue
Exécutez Ansible à partir de Python à l'aide de l'API
Précautions lors de l'utilisation de phantomjs de python
Accéder aux feuilles de calcul à partir de Python à l'aide d'OAuth 2.0
Essayez d'utiliser Amazon DynamoDB à partir de Python
Extraire des chaînes de fichiers avec Python
N'a pas changé de Python 2 à 3
Mettre à jour Mac Python de 2 à 3
De la préparation à l'analyse morphologique avec python en utilisant polyglotte au marquage des mots partiels
Comment gérer l'erreur OAuth2 lors de l'utilisation des API Google à partir de Python
Créez un outil qui secoue automatiquement furigana avec html en utilisant Mecab de Python3
Essayez d'utiliser le framework web de Python Django (1) - De l'installation au démarrage du serveur
Comment obtenir la valeur du magasin de paramètres dans lambda (en utilisant python)
[AWS] Utilisation de fichiers ini avec Lambda [Python]
[Python] Simulation de fluide: de linéaire à non linéaire
Enregistrer des fichiers à l'aide du stockage EC2 sans utiliser S3
Lire un fichier audio à partir de Python avec interruption
Introduction à la simulation d'événements discrets à l'aide de Python # 1
Comment mettre à jour Google Sheets à partir de Python
PUT gzip directement dans S3 en Python
Manuel Python privé (mis à jour de temps en temps)
Conversion de katakana en voyelle kana [python]
Notification push du serveur Python vers Android