Как распаковать zip-файл и показать его в виде списка в python-Django - PullRequest
0 голосов
/ 24 января 2019

Я изучаю python и django, я хочу создать конечную точку, которая берет zip-файл, перебирает его и показывает мне список элементов внутри zip-файла. Что было бы самым простым способом реализовать это? Я что-то пробовал, так как мои знания в django совсем не хороши.

from django.core.files.storage import FileSystemStorage
import zipfile

class Upload(View):
    def post(self, request):
        context = {}

        if request.method == 'POST':
            uploaded_file = request.FILES['filename']
            zf = zipfile.ZipFile(uploaded_file)
            print zf.namelist()


            for filename in zf.namelist():

                fs = FileSystemStorage()                    
                rename = 'uploadedFile.jpg'                 
                name = fs.save(rename, filename)            
                context['url'] = fs.url(name)               

        return render(request, 'app.html', context)

так что в основном моя цель - взять zip-файл, переименовать его и создать URL для каждого. Мой заявленный код не является правильным способом сделать это, поскольку он приносит некоторую ошибку, не могли бы вы помочь мне с правильным способом?

1 Ответ

0 голосов
/ 24 января 2019

Я не тестировал этот код в живом проекте django, но именно так я и буду кодировать вашу задачу.

from zipfile import ZipFile

def get_filenames(path_to_zip):
    """ return list of filenames inside of the zip folder"""
    with ZipFile(path_to_zip, 'r') as zip:
        return zip.namelist()

и на ваш взгляд:

class Upload(View):
    def post(self, request):
        # as you use class based views you can skip the check of request type (request.method == 'POST'). 
        # It always will be POST as it post() method
        filenames = get_filenames('your_zip.zip')           
        return render(request, 'app.html', {'filenames': filenames})

Это всего лишь пример, но вы можете добавить дополнительную логику, например, переименование и т. Д.

PS Не могудобавить комментарий, но если вы находитесь на python3 и получили SyntaxError на

print zf.namelist()

, просто заключите его в квадратные скобки:

print(zf.namelist())
...