Как вывести zip-файл в Luigi Task? - PullRequest
0 голосов
/ 16 ноября 2018

Это нормально для output() ZIP-файлов, например:

def output(self):
    date_path = self.search['date_path']
    zip_fn = "data/%s/%s.zip" % (date_path, date_path)
    return luigi.LocalTarget(zip_fn)

Но как вставить этот ZIP-файл в методе run()?

class ZeroTask(luigi.Task):
    path_in = luigi.Parameter()
    textfiles = []
    path_to_zip = ''

    def requires(self):
        return []

    def run(self):

       # Get bunch of text files
       # some manipulations with textfiles
       # Create a result.zip
       # self.path_to_zip = '~/Project/result.zip'

    def output(self):
        zip_fn = self.path_to_result.zip
        return luigi.LocalTarget(zip_fn)

Что делать в run() метод?

1 Ответ

0 голосов
/ 16 ноября 2018

Вы можете использовать zipfile для создания файла так, как вам нравится.

class MyTask(luigi.Task):
    def output(self):
      date_path = self.search['date_path']
      zip_fn = "data/%s/%s.zip" % (date_path, date_path)
      return luigi.LocalTarget(zip_fn)

     def run(self):
        ztemp = tempfile.NamedTemporaryFile(mode='wb')
        z = zipfile.ZipFile(ztemp, 'w')

        #  build the zip file

        z.close()
        os.rename(ztemp.name, self.output().path)

С документы на FileSystemTarget ,

...