S3-Datei auf lokal mit luigi hebt UnicodeDecodeError

Ich kopiere eine pdf Datei auf lokal, mit dem folgenden Code:

 with self.input_target().open('r') as r: with self.output_target().open('w') as w: for line in r: w.write(line) 

Das ist in dieser Frage (Art von)

  • Boto - Hochladen von Datei an einen bestimmten Ort auf Amazon S3
  • Verwenden von boto für AWS S3 Buckets für Signatur V4
  • Default Django-Ajax-Uploader mit s3 Backend gibt MalformedXML Fehler
  • Hochladen Sie direkt auf S3 von django
  • Direkter Upload auf S3 mit Python / Boto / Django, um die Richtlinie zu konstruieren
  • Lesen Sie eine Datei Zeile für Zeile von S3 mit boto?
  • Aber wenn ich diesen Code ausführe, bekomme ich folgendes:

     UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe2 in position 11: invalid continuation byte 

    Ich habe diesen anderen Ansatz versucht, ohne gute Ergebnisse:

      with self.input_target().open('r') as r, self.output_target().open('w') as w: w.write(r.read()) 

    Was ist der richtige Weg, es zu tun?

  • Python Recursive Funktion für Collatz Conjecture
  • Merkwürdiges Rekursionsverhalten in Python
  • Integer auf Basis-x-System mit Rekursion in Python
  • Iteration in Rekursion umwandeln
  • Python RuntimeError: maximale Rekursionstiefe überschritten
  • Python - Eigenschaftseinstellung aus der Liste verursacht maximale Rekursionstiefe überschritten
  • 2 Solutions collect form web for “S3-Datei auf lokal mit luigi hebt UnicodeDecodeError”

    Es scheint, dass es sich um eine Binärdatei handelt, als ob es Text wäre – aber das ist nicht. Wahrscheinlich musst du so etwas machen:

     with self.input().open('r') as i, self.output().open('w') as o: o.write(i.read()) 

    (nicht getestet!)

    Auch ich glaube, Sie können diese Antwort nützlich finden: Python schriftlich binäre Dateien, Bytes

    Ich beendete mit luigi.s3.S3Client und die Methode get die eine Binärdatei von / auf die s3 kopiert.

    Codeausschnitt:

    Import luigi

     class ATask(luigi.Task): s3_path = luigi.Parameter() local_path = luigi.Parameter() ... def run(self): client = luigi.s3.S3Client() client.get(s3_path, local_path) ## This gets the file ... 

    Ich denke, dass der zugrunde liegende Grund ist, dass luigi verwendet boto für das Erhalten / Putting von Dateien von / auf die s3 . (Wie Sie im Quellcode sehen können)

    Python ist die beste Programmiersprache der Welt.