Я сделал скрипт на 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)
Если кто-нибудь знает, в чем проблема, дайте мне знать.






Я думаю, что проблема может заключаться в том, как 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)
А, ладно. Тогда вы можете добавить какой-нибудь индикатор прогресса! Например, print(root, len(files)) перед for file in files:, чтобы напечатать количество файлов в каждой папке. :)
Это должно отлично работать, спасибо за ответ! Однако я обнаружил, что проблема заключалась в чрезмерном количестве файлов, таких как;
Version-0.apversion, созданный iPhoto, это папка, из которой я пытаюсь выполнить фильтрацию. Программа должна сканировать каждый из этих файлов, что может занять некоторое время.