Python скрипт для перемещения файлов останавливается на 1486 файлах - PullRequest
0 голосов
/ 04 июня 2018

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

У меня более 830 ГБ фотографий для сортировки.

Однако на 1486-м файле программа не падает.или зависание, оно не заканчивается, оно просто останавливается.

Вот мой код;

    # For each file in the drive
    for root, dirs, files in os.walk(drive):
        # For each name in the files
        for file in files:
            if "ImageSorter" in root:
                break;

            file_name = os.path.splitext(file)[0]
            extension = os.path.splitext(file)[1]

            # Iterate through each supported file extension
            # in our list
            if extension in supported_extensions:
                # If this is the first file being found
                if images_found < 1 and images_moved < 1:
                    # Init the folder
                    init_moveto_folder()

                images_found += 1

                image_dir = os.path.join(root, file);
                # Move the file
                shutil.move(image_dir, drive + "\\ImageSorter\\" + file_name + "_" + str(images_moved + 1) + extension)
                images_moved += 1

                if not extension in found_extensions:
                   found_extensions.append(extension)

                print(images_moved)
        sleep(0.01)

Если кто-нибудь знает, в чем проблема, пожалуйста, дайте мне знать.

1 Ответ

0 голосов
/ 04 июня 2018

Я думаю, что проблема может заключаться в том, что os.walk перебирает диск и как взаимодействует целевая папка.

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

init_moveto_folder()  # Only check initialization once

for root, dirs, files in os.walk(drive):  # For each file in the drive
    if 'ImageSorter' in root:  # Don't bother with the ImageSorter folder 
        dirs[:] = []  # Clear out the subdirectory list so `os.walk` doesn't go there
        continue
    for file in files:
        file_name, extension = os.path.splitext(file)
        if extension not in supported_extensions:
            found_extensions.append(extension)
            continue  # Extension not supported; continue
        images_found += 1
        source_path = os.path.join(root, file)
        target_path = '%s\\ImageSorter\\%s_%s%s' % (
            drive,
            file_name,
            (images_moved + 1),
            extension,
        )
        print('%s => %s' % (
            source_path,
            target_path,
        ))
        #shutil.move(source_path, target_path)
        images_moved += 1
    sleep(0.01)
...