Как временно переименовать файл или Создать переименованный временный файл в Python перед его застегиванием на молнию

В приведенном ниже коде я пытаюсь застегнуть список файлов, я пытаюсь переименовать файлы перед застегиванием. Таким образом, имя файла будет в более читаемом формате для пользователя.

В первый раз все работает, но когда я делаю это снова, происходит сбой с ошибкой имя файла уже существует

Возврат ответа через Django Rest Framework через FileResponse. Есть ли более простой способ достичь этого .

filenames_list=['10_TEST_Comments_12/03/2021','10_TEST_Posts_04/10/2020','10_TEST_Likes_04/09/2020']

        with zipfile.ZipFile(fr"reports/downloads/reports.zip", 'w') as zipF:
            for file in filenames_list:
                friendly_name = get_friendly_name(file)
        if friendly_name is not None:
           os.rename(file,fr"/reports/downloads/{friendly_name}")
           file = friendly_name

        zipF.write(fr"reports/downloads/{file}", file, compress_type=zipfile.ZIP_DEFLATED)
        zip_file = open(fr"reports/downloads/reports.zip", 'rb')
        response = FileResponse(zip_file)
        return response

ZipFile.write имеет второй параметр, arcname, который позволяет переименовывать файлы без какого-либо копирования. Вам не нужно перемещать file в отдельную папку или фактически переименовывать его.

from os.path import basename

for file in filenames_list:
    if (name := get_friendly_name(file)) is None:
        name = basename(file)
zipF.write(file, name, compress_type=zipfile.ZIP_DEFLATED)

Убирая basename, вы вообще избегаете необходимости перемещения в общую папку.

Вернуться на верх