Write to /tmp directory in aws lambda with python

前端 未结 1 598
攒了一身酷
攒了一身酷 2020-12-30 07:18

Goal

I\'m trying to write a zip file to the /tmp folder in a python aws lambda, so I can extract manipulate before zipping, and placing it in s3 buc

相关标签:
1条回答
  • 2020-12-30 08:06

    extractAll() will extract files in the current directory, which is /var/task/test-deploy in your case.

    You need to use os.chdir() to change the current directory:

    import os, zipfile
    
    os.chdir('/tmp')
    with zipfile.ZipFile(source, 'r') as archive:
        archive.extractall()
    

    Even better, you can create a temporary directory and extract the files there, to avoid polluting /tmp:

    import os, tempfile, zipfile
    
    with tempfile.TemporaryDirectory() as tmpdir:
        os.chdir(tmpdir)
        with zipfile.ZipFile(source, 'r') as archive:
            archive.extractall()
    

    If you want to restore the current working directory after extracting the file, consider using this decorator:

    import os, tempfile, zipfile, contextlib
    
    @contextlib.context_manager
    def temporary_work_dir():
        old_work_dir = os.getcwd()
        with tempfile.TemporaryDirectory() as tmp_dir:
            os.chdir(tmp_dir)
            try:
                yield
            finally:
                os.chdir(old_work_dir)
    
    with temporary_work_dir():
        with zipfile.ZipFile(source, 'r') as archive:
            archive.extractall()
    
    0 讨论(0)
提交回复
热议问题