Как обойти ошибку уже существующего файла при переносе?

Рейтинг: 0Ответов: 1Опубликовано: 21.03.2023

Есть функция которая переносит файлы. Но если в папке куда нужно перенести уже существует файл с таким же названием - будет ошибка. Как этого избежать?

ignore_list - папки в которые сортируются файлы files_paths - множество в котором пути ко всем файлам который нужно переместить path_for_sort - путь к папке в которую нужно переместить файл

Таким образом если есть два одинаковых 'Test.txt' в двух разных папках из которых файлы нужно переместить, выведет ошибку:

shutil.Error: Destination path 'C:\New folder\documents\New_Text_Document.txt' already exists

IGNORE_LIST = ["images", "videos", "documents", "audios", "archives"]
# dict with files in its type of format
groups_of_files = {
    "images": [],
    "videos": [],
    "documents": [],
    "audios": [],
    "archives": [],
}

def sort_files(
    paths_to_files: set, file_groups: dict, path_folder_for_sort: str, ignore_list
) -> None:

# This func moves all files to folders for sorted

for path_to_file in paths_to_files:

    # get previously folder (/ARCHIVES/file.rar)
    previously_folder = split(path_to_file)[0].split("\\")[-2]

    for name_of_group, formats_list in file_groups.items():

        # check if folder in ignore list
        if (
            split(path_to_file)[-1] in formats_list
            and previously_folder not in ignore_list
        ):
            if Path(path_to_file) != Path(
                path_folder_for_sort
                + "\\"
                + name_of_group
                + "\\"
                + split(path_to_file)[-1]
            ):
                shutil.move(
                    path_to_file, path_folder_for_sort + "\\" + name_of_group + "\\"
                )

sort_files(files_paths, groups_of_files, path_for_sort, IGNORE_LIST)

Ответы

▲ -1Принят

Попробуйте обернуть shutil.move() в try except:

try:
    shutil.move(path_to_file, path_folder_for_sort + "\\" + name_of_group + "\\")
except Exception as e:
   print(e)
   pass

Либо используйте os.replace(): "В Windows файл с таким именем не должен существовать, иначе будет вызвано исключение, но os.replace() автоматически заменит файл даже в этом случае." Источник https://stackoverflow.com/questions/8858008/how-do-i-move-a-file-in-python