Pythons os.walk () посещает все папки, а не только данную папку

Я хотел использовать простой скрипт, чтобы получить все изображения ниже данной папки и сравнить их / найти дубликаты.

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

Но он терпит неудачу уже на первом этапе в том смысле, что посещает все папки на данном USB-накопителе. Я удалил все хеширование и пытаюсь получить только список файлов, но даже это длится вечно и посещает каждый файл на USB-накопителе.

from __future__ import print_function   # py2 compatibility
from collections import defaultdict
import hashlib
import os
import sys


folder_to_check = "D:\FileCompareTest"

def check_for_duplicates(paths, hash=hashlib.sha1):
    hashes_by_size = defaultdict(list)  # dict of size_in_bytes: [full_path_to_file1, full_path_to_file2, ]
    hashes_on_1k = defaultdict(list)  # dict of (hash1k, size_in_bytes): [full_path_to_file1, full_path_to_file2, ]
    hashes_full = {}   # dict of full_file_hash: full_path_to_file_string

    for path in paths:
        for dirpath, dirnames, filenames in os.walk(path):
            # get all files that have the same size - they are the collision candidates
            for filename in filenames:
                full_path = os.path.join(dirpath, filename)
                try:
                    # if the target is a symlink (soft one), this will 
                    # dereference it - change the value to the actual target file
                    full_path = os.path.realpath(full_path)
                    file_size = os.path.getsize(full_path)
                    hashes_by_size[file_size].append(full_path)
                except (OSError,):
                    # not accessible (permissions, etc) - pass on
                    continue




check_for_duplicates(folder_to_check)

Вместо того, чтобы получить список hashes_by_size за пару миллисекунд, я застреваю либо в вечном цикле, либо программа завершается через несколько часов со всеми файлами на USB.

Что я не понимаю в os.walk ()?

Значит, я не могу ограничить os.walk переходом только под определенную папку? мне трудно в это поверить   —  person rioZg    schedule 03.02.2021

Вы можете найти подробную информацию о том, как os.walk работает на странице документации. https://docs.python.org/3/library/os.html#os.walk.   —  person rioZg    schedule 03.02.2021

См. также:  Как избежать двойных и одинарных кавычек в sed?
Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 1
  1. rioZg

    Вам следует позвонить

    paths_to_check = []
    paths_to_check.append(folder_to_check)
    check_for_duplicates(paths_to_check)
    

    То, как вы зовете, вы получаете генераторы на каждого персонажа на вашем пути, а не на вашем правильном пути.

    Ух ты. Благодаря тонну. Вот и все. Я бы не придумал это самостоятельно. Мне нужно подождать еще 6 минут, чтобы принять ответ. person rioZg; 03.02.2021

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: