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)

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?

  • Globaler vs. lokaler Namensraum Leistungsunterschied
  • Zeichnung in PyGobject (python3)
  • Wie ist super () in Python 3 implementiert?
  • Dateigröße für read ()?
  • Warum braucht Python2.7 mehr Platz als Python3 dict?
  • Konvertieren Sie CSV zu YAML, mit Unicode?
  • ImportError: Kein Modul namens 'util'
  • Die Python-Funktion für ein Codeobjekt erhalten
  • 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.