Convertissez les fichiers téléchargés vers Cloud Storage avec Cloud Functions (Python) afin qu'ils ne soient pas déformés dans Excel

Contexte

Situation dans laquelle vous souhaitez étendre le résultat de la requête de BigQuery vers GCS et l'afficher dans Excel. BigQuery-> GCS crache le résultat avec utf8, donc lorsque je l'ouvre avec Excel, les caractères japonais sont déformés. Par conséquent, implémentez les fonctions cloud qui seront converties en utf8 avec bom sans autorisation lorsque vous placez le fichier dans le compartiment.

Cloud Function with Python Si vous la touchez pour la première fois, lisez cette zone et touchez-la.

Démarrage rapide Python Première fonction: Python

Fonctions qui se déclenchent dans Cloud Storage

Vous pouvez créer une fonction qui se déclenche lorsqu'un objet est créé dans Cloud Storage

Tutoriel Cloud Storage #Finalizing Objects

échantillon

Une fonction qui convertit le fichier du bucket en utf8 avec bom et le télécharge avec bom_ ajouté au préfixe.

main.py


from google.cloud import storage


def convert_to_bom(data, context):
    bucket_name = data['bucket']
    file_path = data['name']
    prefix = 'bom_'

    file_path_arr = file_path.split('/')
    file_name = file_path_arr[-1]

    if file_name.startswith(prefix):
        return 'skipping of bom file.'

    dir_arr = file_path_arr[:-1]
    dir_path = '/'.join(dir_arr) + '/'
    local_file_path = '/tmp/' + file_name

    if(len(file_path_arr) == 1):
        new_file_path = prefix + file_path
    else:
        new_file_path = dir_path + prefix + file_name

    client = storage.Client()
    bucket = client.get_bucket(bucket_name)
    dl_blob = bucket.get_blob(file_path)
    up_blob = bucket.blob(new_file_path)

    with open(local_file_path, 'w', newline='', encoding='utf_8_sig', errors='ignore') as f:
        f.write(dl_blob.download_as_string().decode('utf8'))

    up_blob.upload_from_filename(local_file_path)

    return 'success'

requirements.txt


-i https://pypi.org/simple
cachetools==4.1.0
certifi==2020.4.5.1
chardet==3.0.4
google-api-core==1.19.0
google-auth==1.16.1
google-cloud-core==1.3.0
google-cloud-storage==1.28.1
google-resumable-media==0.5.1
googleapis-common-protos==1.52.0
idna==2.9
protobuf==3.12.2
pyasn1-modules==0.2.8
pyasn1==0.4.8
pytz==2020.1
requests==2.23.0
rsa==4.0
six==1.15.0
urllib3==1.25.9

Déployer

gcloud functions deploy convert_to_bom --runtime python37 --trigger-resource ${YOUR_BUCKET} --trigger-event google.storage.object.finalize

Précautions lors de l'écriture d'un fichier

Soyez prudent car vous ne pouvez pas écrire dans des répertoires autres que / tmp. Quand j'essaye d'écrire, la fonction plante et meurt tranquillement.

La seule partie du système de fichiers accessible en écriture est le répertoire / tmp. Ce répertoire peut être utilisé comme emplacement de stockage pour les fichiers temporaires des instances de fonction.

Environnement d'exécution de Cloud Functions # système de fichiers

référence

PythonClientforGoogleCloudStorage [GoogleCloudStorage] Comment utiliser l'API GCS Python [Note]

Recommended Posts

Convertissez les fichiers téléchargés vers Cloud Storage avec Cloud Functions (Python) afin qu'ils ne soient pas déformés dans Excel
Convertissez les fichiers téléchargés vers Cloud Storage avec Cloud Functions (Python) afin qu'ils ne soient pas déformés dans Excel
Obtenir la liste des objets Google Cloud Storage en Java
Obtenez le fichier, la fonction, le numéro de ligne en cours d'exécution en python
Comment télécharger des fichiers sur Cloud Storage avec le SDK Python de Firebase
Convertir des fichiers écrits en python, etc. en pdf avec la coloration syntaxique
Télécharger des fichiers sur Aspera fournis avec IBM Cloud Object Storage (ICOS) à l'aide du SDK (version Python)
Convertissez la feuille de calcul en CSV et importez-la dans Cloud Storage avec Cloud Functions
Convertir le fichier FBX en ASCII <-> BINARY en Python
Convertissez des PDF en images en masse avec Python
Convertir des fichiers CSV UTF-8 pour les lire dans Excel
Une solution au problème que les fichiers contenant [et] ne sont pas répertoriés dans glob.glob ()
Comment convertir / restaurer une chaîne avec [] en python
Convertissez l'image au format .zip en PDF avec Python
Mémo d'entrée / sortie de stockage par Python dans Azure Functions
Cloud Functions pour redimensionner les images à l'aide d'OpenCV avec le déclencheur Cloud Storage
Convertir un fichier Excel en texte en Python à des fins de comparaison
Comment ne pas échapper au japonais en traitant avec JSON en Python
[GCP] Comment publier une URL signée Cloud Storage (URL temporaire) en Python
Expressions régulières faciles et solides à apprendre en Python
Publier un message d'IBM Cloud Functions sur Slack en Python
Comment utiliser les fonctions dans des fichiers séparés version Perl et version Python
Téléchargez et gérez les packages qui ne sont pas dans conda sur anaconda.org
Comment se connecter à Cloud Firestore à partir de Google Cloud Functions avec du code Python
Télécharger le fichier sur Cloud Storage (GCS) de GCP ~ Charger avec Python local
Convertir Markdown en PDF en Python
Convertir la liste en DataFrame avec python
Gérer les fichiers Excel CSV avec Python
Lire des fichiers en parallèle avec Python
Avec PEP8 et PEP257, un codage Python qui n'est pas gênant à montrer aux gens!
J'ai créé un script en python pour convertir des fichiers .md au format Scrapbox
Copier des données d'Amazon S3 vers Google Cloud Storage avec Python (boto)
Que faire lorsque la version Python est ancienne dans Cloud 9 créée par une autre personne