Как правильно удалять и сохранять файлы изображений в python flask

Формируются 2 кортежа с именами файлов.
1 кортеж - имена файлов для удаления (получены из БД).
2 кортеж - имена файлов для сохранения (получены из формы).

Я пытаюсь так:

import os

old_name = (get_image_name.img_1, get_image_name.img_2, get_image_name.img_3)
new_name = (request.files['img_1'], request.files['img_2'], request.files['img_3'])

for i in range(3):
    os.remove(os.path.join(app.config['UPLOAD_FOLDER'] + 'test_folder/', old_name[i]))
    new_name[i].save(os.path.join(app.config['UPLOAD_FOLDER'] + 'test_folder/', new_name[i].filename))

В таком виде, если требуется удалить 2 файла и при этом сохранить 3 файла, то 3й файл не сохраняется.
Хотя если требуется удалить 2 файла и сохранить 2, или удалить 3 файла и сохранить 2, то перезапись происходит корректно.

Как сделать так, что бы удалялось и сохранялось любое количество файлов?


Ответы (1 шт):

Автор решения: Gnifajio

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

with open('filename', 'w') as f:
    f.write('This is new data, the old ones have been overwritten')

Если вам нужно перезаписать несколько файлов, то просто поместите конструкцию with в цикл for:

file_names = ('a.txt', 'b.txt', 'c.txt') # Кортеж с именами файлов
files_data = ( # Кортеж с данными
    'data inside the file a.txt',
    'data inside the file b.txt',
    'data inside the file c.txt'
)

for name, data for zip(file_names, files_data):
    with open(name, 'w') as f:
        f.write(data)

→ Ссылка