Помогите исправить ошибку shutil
Делаю функцию для распаковки архива (в папке с архивом создаётся папка в которой все файлы):
def unpack_archives(archive_path):
archive_path = Path(archive_path + '/archive')
for archive in archive_path.rglob("*"):
try:
shutil.unpack_archive(archive, archive_path)
except BaseException:
continue
Вылазит ошибка, если файл уже был распакован, то есть там файл уже создан. Как это убрать? Какую ошибку вписать в try. Если у меня два архива в папке и один уже был распакован, то я не смогу из-за ошибки распаковать второй архив. Ошибка:
Traceback (most recent call last):
File "C:\Projects\Test_Project\Test.py", line 125, in <module>
sort_files(files_paths, groups_of_files)
File "C:\Projects\Test_Project\Test.py", line 45, in sort_files
shutil.move(file_path, path_folder_for_sort + '/' + name_group)
File "C:\Users\Lenovo\AppData\Local\Programs\Python\Python311\Lib\shutil.py", line 822, in move
raise Error("Destination path '%s' already exists" % real_dst)
shutil.Error: Destination path '/Projects/Example/documents\kek.txt' already exists
Ответы (1 шт):
Чтобы разгрузить ветку комментариев, предложу код в ответе. Распаковываем каждый архив в отдельную папку с его названием.
import os
def unpack_archives(archive_path):
for archive in archive_path.rglob("*"):
shutil.unpack_archive(archive, os.path.join(archive_path, archive))
Если неправильно отработает, пиши.
Предлагаю не заморачиваться с пропуском ошибки, т.к. если в двух архивах есть папка, допустим, /images, то при варианте с обработкой ошибок данная папка запишется только из одного архива, а вторая будет игнорирована, что, вероятно, не очень бы хотелось.