Master_Sergius
Ноя. 12, 2013 12:38:34
По именам файлов довольно не глупо сравнивать - допустим есть дубликат песни, только одна в mp3, вторая в wav, ну и так далее. Таких примеров полно, хотелось бы почистить всё как следует
cutwater
Ноя. 12, 2013 13:11:08
Так вот речь о том, что в таком виде сравнение по именам имеет различные случаи, когда такой алгоритм не сработает. Например, в случае серии пронумерованных файлов. В данном случае, одного сравнения с некоторым коэффициентом недостаточно. Нужно четко выделить требования для сравнения имен файлов, в каких случаях мы допускаем, что имена похожи. В каких нет.
И вот в таком виде, этот алгоритм будет давать множество ложных срабатываний, я бы даже предположил гораздо больше чем значимых результатов.
Master_Sergius
Ноя. 12, 2013 13:30:57
Хорошо. Вы человек, знающий, вот помогите с алгоритмом, как же допилить этот несчастный скрипт, да чтоб навести порядок на компе хоть немного?
cutwater
Ноя. 12, 2013 15:42:46
https://gist.github.com/cutwater/7431005Как один из вариантов, а с дубликатами по именам разбирайтесь сами.
Rodegast
Ноя. 12, 2013 21:17:29
> Самое первое - непонятное поведение os.walk, если указать os.walk('d:') - оно не хочет работать, по крайней мере, если запустить программу вот так - duplicates.py d: - оно ничего не делает, если же запустить duplicates.py d
- тогда начинает шуршать
Вот не думал что я буду это виндузятникам объяснять
d: - Это обозначение тома (читай диска) “d”
d
- Это корневая файловая файловая система которая находится на томе “d”
Т.е. d: это не путь к каталогу, а обозначение тома. По этому walkу тебя и работает не однозначно.
JOHN_16
Ноя. 12, 2013 22:57:13
Master_Sergius
Насчёт неверия - что стоит, взять и проверить?
мне не нужно проверять что я не слон…но судя по топику вам нужно разжевывать, бывает тут сидят люди гораздо опытнее вас, и с первого взгляда видят проблему, и не не нужно ее проверять непосредственно, у них есть опыт и знания что бы об этом судить. Далее, по само собой сложившейся традиции, гораздо эффективнее заставить человека думать, нежели предоставить ему готовое решение.да да , вот такие мы педагоги.
Вам нужно помнить что такое бинарный файл и текстовой.
На счет совпадение по именам. Я дам вам ценный совет о том как надо думать что бы писать правильный код. Возьмите ряд “проблемных” файлов и начните их обрабатывать в ручную, выясните для самого себя критерии по которым вы принимаете решения для каждого конкретного случая. Эти критерии прямо перейдут в ваш код. Вам правильно сказали выше: foto_1.jpg и foto_2.jpg, my_song.mp3 и my_song.flac - это очень разные случаи которые требуют разного подхода, который в свою очередь должны проработать вы сами.
Master_Sergius
Ноя. 13, 2013 10:33:20
Ок, “педагоги”
Я ж вас и не осуждаю за ваши методы, но да, порой мне надо разжевать, бывает туплю. Просто прошу помочь разобраться самоучке…
Ещё такая вещь - для почистки воспользовался поиском дубликатов в Тотал Коммандере - он это дело по названиям и по размеру делает быстро. Вот, хотелось бы знать, что же там за алгоритм - и бд он явно не юзает, разве что симуляцию какую-то. При этом, в процессе расло количество используемой оперативки тоталом. Под конец было чуть ли не до 100 мб… Неужто он всё держал в оперативе? Потом, со списком он мог даже сортировку проводить, а список был длинный более 100к совпадений. Очень интересно знать алгоритм.
п.с. насчёт виндузятника, мне в последнее время даже линукс стал более понятным, чем винда, но это не суть важно. Ещё многому учиться, учиться и ещё раз учиться.
doza_and
Ноя. 13, 2013 20:23:05
Для почистки диска пробовал пользоваться dupkiller, но на самом деле оказалось неэффективно. Если аккуратно работаешь то вообще не возникает нужды чтото чистить.
Но тут возникает интересная задача:
Как представить информацию о найденых дубликатах?
Дело в том, что они часто возникают при копировании папок. В этом случае желательно получить не 300 сообщений (по количествую файлов в папке) о том что файлы находятся в директориях a и b, а получить сообщение что дублируются директории. Директория может иметь поддиректории. При работе может оказаться что они почти совпадают (например добавлена пара файлов) и.т.п.
Другой пример, SConscript, makefile и т.п. маркеры очень часто полностью совпадают, но они необходимы, поскольку просто указывают на поведение утилит в данной директории. Их при поиске дубликатов учитывать не нужно.
JOHN_16
Ноя. 13, 2013 22:39:07
Master_Sergius
вы сами и ответили - держит это все в памяти, но я открою вам секрет, та же бд sqlite может работать не в файл, а в память… То что он делает это быстро ничего удивительного, ведь получить имя файла и его размер в N раз проще, чем посчитать хеш-сумму.
sp3
Ноя. 14, 2013 06:39:35
doza_and
И всякие файлы типа __init__.py тоже не нужны :)