Проблема с переносом файлов из папки на Python

У меня есть простая python программа, которая извлекает из zip архива по указанному пути все файлы, сохраняет их в отдельную папку, потом выдергивает из названия файлов дату и в соответствии с этой датой создает для каждого файла со своей датой новую папку соответствующую этой дате. Проблема в том, что мой код это делает единоразово. Т.е. после создания папки и перемещения туда соответствующих файлов, я не могу запустить свой код для другого zip архива если там присутствуют файлы с той же датой. Как сделать так, чтобы, если папка с таким названием уже существует, то к ней просто добавлялись файлы, и программа не пыталась создавать новую папку?

import zipfile
import os

# Путь к архиву
archive_path = "C:\\Users\\Doc\\Downloads\\Archive.zip"

# Путь к папке, куда будут извлечены файлы
extract_path = "C:\\Users\\Doc\\Desktop\\Archieves"

# Открываем архив
with zipfile.ZipFile(archive_path, 'r') as zip_ref:
    # Извлекаем все файлы
    zip_ref.extractall(extract_path)

# Получаем список файлов в папке
file_list = os.listdir(extract_path)

# Проходимся по каждому файлу
for file in file_list:
    # Получаем дату из имени файла
    date = file.split('_')[0]

    # Создаем папку с датой, если она еще не существует
    date_path = os.path.join(extract_path, date)
    if not os.path.exists(date_path):
        os.mkdir(date_path)

    # Перемещаем файл в папку с датой
    os.rename(os.path.join(extract_path, file), os.path.join(date_path, file))

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

Автор решения: Эникейщик

Если говорить очень коротко, то скрипт пытается перенести созданную папку в нее саму.

Распаковывать нужно во временную папку, чтобы не возникало разных интересных ситуаций вроде этой.

Например:

extract_path_temp = r"C:\Users\Doc\Desktop\Archieves_temp"

И соответствующим образом подправить другие строчки:

with zipfile.ZipFile(archive_path, 'r') as zip_ref:
    # Извлекаем все файлы
    zip_ref.extractall(extract_path_temp) # <---

# Получаем список файлов в папке
file_list = os.listdir(extract_path_temp) # <---

И здесь:

os.rename(os.path.join(extract_path_temp, file), os.path.join(date_path, file))

Папку r"C:\Users\Doc\Desktop\Archieves_temp" при желании можно удалить после завершения работы скрипта:

os.rmdir(extract_path_temp)

Стоит еще помнить, что если в двух архивах будут файлы с одинаковыми именами, то тоже будет ошибка, но другая: FileExistsError. Как ее решать зависит от автора.

→ Ссылка