S3文件到本地使用luigi引发UnicodeDecodeError

时间:2015-11-07 05:18:42

标签: python python-3.x amazon-s3 luigi

我正在使用以下代码将$('.dropdown-menu a').on('click', function(e){ e.preventDefault(); $('button.dropdown-toggle').html($(this).text() + ' <span class="caret"></span>'); $(".box").hide(); $('.'+$(this).attr('id')).show(); }); 文件复制到本地:

pdf

哪个基于this问题(种类)

但是当我执行该代码时,我得到以下内容:

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

我尝试了另一种方法,没有取得好成绩:

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

这样做的正确方法是什么?

3 个答案:

答案 0 :(得分:0)

您似乎正在处理二进制文件,就好像它是文本一样 - 但事实并非如此。你可能需要这样做:

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

(未经测试!)

此外,我认为您可能会发现此答案很有用:Python writing binary files, bytes

答案 1 :(得分:0)

我使用None和方法luigi.s3.S3Client结束,该方法将二进制文件从/ {复制到get

代码片段:

import luigi

s3

我认为其根本原因是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 ... 使用luigi从/ boto获取/放置文件。 (正如您在源代码中看到的那样)

答案 2 :(得分:0)

另一种选择是使用Target的格式kwarg luigi.format.Nop表示它是一个正在读取的二进制文件。

例如

def output(self):
    return LocalTarget(target, format=luigi.format.Nop)