Найти - Пользователи
Полная версия: Поиск дубликатов файлов под виндой
Начало » Python для экспертов » Поиск дубликатов файлов под виндой
1 2
Master_Sergius
По именам файлов довольно не глупо сравнивать - допустим есть дубликат песни, только одна в mp3, вторая в wav, ну и так далее. Таких примеров полно, хотелось бы почистить всё как следует
cutwater
Так вот речь о том, что в таком виде сравнение по именам имеет различные случаи, когда такой алгоритм не сработает. Например, в случае серии пронумерованных файлов. В данном случае, одного сравнения с некоторым коэффициентом недостаточно. Нужно четко выделить требования для сравнения имен файлов, в каких случаях мы допускаем, что имена похожи. В каких нет.
И вот в таком виде, этот алгоритм будет давать множество ложных срабатываний, я бы даже предположил гораздо больше чем значимых результатов.
Master_Sergius
Хорошо. Вы человек, знающий, вот помогите с алгоритмом, как же допилить этот несчастный скрипт, да чтоб навести порядок на компе хоть немного?
cutwater
https://gist.github.com/cutwater/7431005

Как один из вариантов, а с дубликатами по именам разбирайтесь сами.
Rodegast
> Самое первое - непонятное поведение os.walk, если указать os.walk('d:') - оно не хочет работать, по крайней мере, если запустить программу вот так - duplicates.py d: - оно ничего не делает, если же запустить duplicates.py d - тогда начинает шуршать

Вот не думал что я буду это виндузятникам объяснять
d: - Это обозначение тома (читай диска) “d”
d - Это корневая файловая файловая система которая находится на томе “d”
Т.е. d: это не путь к каталогу, а обозначение тома. По этому walkу тебя и работает не однозначно.
JOHN_16
Master_Sergius
Насчёт неверия - что стоит, взять и проверить?
мне не нужно проверять что я не слон…но судя по топику вам нужно разжевывать, бывает тут сидят люди гораздо опытнее вас, и с первого взгляда видят проблему, и не не нужно ее проверять непосредственно, у них есть опыт и знания что бы об этом судить. Далее, по само собой сложившейся традиции, гораздо эффективнее заставить человека думать, нежели предоставить ему готовое решение.да да , вот такие мы педагоги.
Вам нужно помнить что такое бинарный файл и текстовой.
На счет совпадение по именам. Я дам вам ценный совет о том как надо думать что бы писать правильный код. Возьмите ряд “проблемных” файлов и начните их обрабатывать в ручную, выясните для самого себя критерии по которым вы принимаете решения для каждого конкретного случая. Эти критерии прямо перейдут в ваш код. Вам правильно сказали выше: foto_1.jpg и foto_2.jpg, my_song.mp3 и my_song.flac - это очень разные случаи которые требуют разного подхода, который в свою очередь должны проработать вы сами.
Master_Sergius
Ок, “педагоги”
Я ж вас и не осуждаю за ваши методы, но да, порой мне надо разжевать, бывает туплю. Просто прошу помочь разобраться самоучке…
Ещё такая вещь - для почистки воспользовался поиском дубликатов в Тотал Коммандере - он это дело по названиям и по размеру делает быстро. Вот, хотелось бы знать, что же там за алгоритм - и бд он явно не юзает, разве что симуляцию какую-то. При этом, в процессе расло количество используемой оперативки тоталом. Под конец было чуть ли не до 100 мб… Неужто он всё держал в оперативе? Потом, со списком он мог даже сортировку проводить, а список был длинный более 100к совпадений. Очень интересно знать алгоритм.

п.с. насчёт виндузятника, мне в последнее время даже линукс стал более понятным, чем винда, но это не суть важно. Ещё многому учиться, учиться и ещё раз учиться.
doza_and
Для почистки диска пробовал пользоваться dupkiller, но на самом деле оказалось неэффективно. Если аккуратно работаешь то вообще не возникает нужды чтото чистить.

Но тут возникает интересная задача:

Как представить информацию о найденых дубликатах?

Дело в том, что они часто возникают при копировании папок. В этом случае желательно получить не 300 сообщений (по количествую файлов в папке) о том что файлы находятся в директориях a и b, а получить сообщение что дублируются директории. Директория может иметь поддиректории. При работе может оказаться что они почти совпадают (например добавлена пара файлов) и.т.п.

Другой пример, SConscript, makefile и т.п. маркеры очень часто полностью совпадают, но они необходимы, поскольку просто указывают на поведение утилит в данной директории. Их при поиске дубликатов учитывать не нужно.
JOHN_16
Master_Sergius
вы сами и ответили - держит это все в памяти, но я открою вам секрет, та же бд sqlite может работать не в файл, а в память… То что он делает это быстро ничего удивительного, ведь получить имя файла и его размер в N раз проще, чем посчитать хеш-сумму.
sp3
doza_and
И всякие файлы типа __init__.py тоже не нужны :)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB