Konvertieren Sie Dateien, die mit Cloud-Funktionen (Python) in den Cloud-Speicher hochgeladen wurden, so, dass sie in Excel nicht verstümmelt werden

Hintergrund

Die Situation, in der Sie das Abfrageergebnis von BigQuery auf GCS erweitern und in Excel anzeigen möchten. BigQuery-> GCS spuckt das Ergebnis mit utf8 aus. Wenn ich es also mit Excel öffne, werden japanische Zeichen verstümmelt. Implementieren Sie daher Cloud-Funktionen, die mit bom ohne Erlaubnis in utf8 konvertiert werden, wenn Sie die Datei in den Bucket legen.

Cloud Function with Python Wenn Sie es zum ersten Mal berühren, lesen Sie diesen Bereich und berühren Sie ihn.

Python-Schnellstart Erste Funktion: Python

Funktionen, die im Cloud-Speicher ausgelöst werden

Sie können eine Funktion erstellen, die ausgelöst wird, wenn ein Objekt in Cloud Storage erstellt wird

Tutorial zum Cloud-Speicher # Objekte finalisieren

Stichprobe

Eine Funktion, die die Datei im Bucket mit bom in utf8 konvertiert und sie mit bom_ hochlädt, das dem Präfix hinzugefügt wurde.

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

Bereitstellen

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

Vorsichtsmaßnahmen beim Schreiben einer Datei

Seien Sie vorsichtig, da Sie nicht in andere Verzeichnisse als / tmp schreiben können. Wenn ich versuche zu schreiben, stürzt die Funktion ab und stirbt leise.

Der einzige beschreibbare Teil des Dateisystems ist das Verzeichnis / tmp. Dieses Verzeichnis kann als Speicherort für temporäre Dateien für Funktionsinstanzen verwendet werden.

Ausführungsumgebung für Cloud-Funktionen # Dateisystem

Referenz

PythonClientforGoogleCloudStorage [GoogleCloudStorage] Verwendung der GCS Python-API [Hinweis]

Recommended Posts

Konvertieren Sie Dateien, die mit Cloud-Funktionen (Python) in den Cloud-Speicher hochgeladen wurden, so, dass sie in Excel nicht verstümmelt werden
Konvertieren Sie Dateien, die mit Cloud-Funktionen (Python) in den Cloud-Speicher hochgeladen wurden, so, dass sie in Excel nicht verstümmelt werden
Abrufen der Google Cloud Storage-Objektliste in Java
Holen Sie sich die Datei, Funktion, Zeilennummer in Python ausgeführt
Hochladen von Dateien in den Cloud-Speicher mit dem Python-SDK von Firebase
Konvertieren Sie in Python usw. geschriebene Dateien in PDF mit Syntax-Hervorhebung
Laden Sie Dateien mit SDK (Python-Version) auf Aspera hoch, das mit IBM Cloud Object Storage (ICOS) geliefert wird.
Konvertieren Sie eine Tabelle in CSV und laden Sie sie mit Cloud-Funktionen in den Cloud-Speicher hoch
Konvertieren Sie die FBX-Datei in Python in ASCII <-> BINARY
Konvertieren Sie PDFs mit Python in Massenbilder
Konvertieren Sie UTF-8-CSV-Dateien in Excel
Eine Lösung für das Problem, dass Dateien mit [und] nicht in glob.glob () aufgeführt sind
So konvertieren / wiederherstellen Sie einen String mit [] in Python
Konvertieren Sie das Bild in .zip mit Python in PDF
Speichereingabe- / Ausgabememo von Python in Azure-Funktionen
Cloud-Funktionen zum Ändern der Bildgröße mithilfe von OpenCV mit Cloud Storage-Trigger
Konvertieren Sie eine Excel-Datei für verschiedene Zwecke in Python in Text
Wie man Japanern nicht entgeht, wenn man mit json in Python umgeht
[GCP] So veröffentlichen Sie eine mit Cloud Storage signierte URL (temporäre URL) in Python
Reguläre Ausdrücke, die in Python leicht und solide zu erlernen sind
Senden Sie eine Nachricht von IBM Cloud Functions an Slack in Python
Verwendung von Funktionen in separaten Dateien Perl-Version und Python-Version
Laden Sie Pakete, die sich nicht in Conda befinden, auf anaconda.org hoch und verwalten Sie sie
Herstellen einer Verbindung zum Cloud Firestore über Google Cloud-Funktionen mit Python-Code
Laden Sie Dateien in den Cloud Storage (GCS) von GCP hoch. ~ Laden Sie mit lokalem Python
Konvertieren Sie Markdown in Python in PDF
Konvertieren Sie die Liste mit Python in DataFrame
Behandeln Sie Excel-CSV-Dateien mit Python
Lesen Sie Dateien parallel zu Python
Mit PEP8 und PEP257 ist es nicht peinlich, Python-Codierung zu zeigen!
Ich habe ein Skript in Python erstellt, um MDD-Dateien in das Scrapbox-Format zu konvertieren
Kopieren Sie Daten von Amazon S3 mit Python (boto) in Google Cloud Storage.
Was tun, wenn die Python-Version in Cloud 9 von einer anderen Person erstellt wurde?