Форум сайта python.su
По именам файлов довольно не глупо сравнивать - допустим есть дубликат песни, только одна в mp3, вторая в wav, ну и так далее. Таких примеров полно, хотелось бы почистить всё как следует
Офлайн
Так вот речь о том, что в таком виде сравнение по именам имеет различные случаи, когда такой алгоритм не сработает. Например, в случае серии пронумерованных файлов. В данном случае, одного сравнения с некоторым коэффициентом недостаточно. Нужно четко выделить требования для сравнения имен файлов, в каких случаях мы допускаем, что имена похожи. В каких нет.
И вот в таком виде, этот алгоритм будет давать множество ложных срабатываний, я бы даже предположил гораздо больше чем значимых результатов.
Отредактировано cutwater (Ноя. 12, 2013 13:14:50)
Офлайн
Хорошо. Вы человек, знающий, вот помогите с алгоритмом, как же допилить этот несчастный скрипт, да чтоб навести порядок на компе хоть немного?
Офлайн
https://gist.github.com/cutwater/7431005
Как один из вариантов, а с дубликатами по именам разбирайтесь сами.
Отредактировано cutwater (Ноя. 12, 2013 15:47:05)
Офлайн
> Самое первое - непонятное поведение os.walk, если указать os.walk('d:') - оно не хочет работать, по крайней мере, если запустить программу вот так - duplicates.py d: - оно ничего не делает, если же запустить duplicates.py d - тогда начинает шуршать
Вот не думал что я буду это виндузятникам объяснять
d: - Это обозначение тома (читай диска) “d”
d - Это корневая файловая файловая система которая находится на томе “d”
Т.е. d: это не путь к каталогу, а обозначение тома. По этому walkу тебя и работает не однозначно.
Офлайн
Master_Sergiusмне не нужно проверять что я не слон…но судя по топику вам нужно разжевывать, бывает тут сидят люди гораздо опытнее вас, и с первого взгляда видят проблему, и не не нужно ее проверять непосредственно, у них есть опыт и знания что бы об этом судить. Далее, по само собой сложившейся традиции, гораздо эффективнее заставить человека думать, нежели предоставить ему готовое решение.да да , вот такие мы педагоги.
Насчёт неверия - что стоит, взять и проверить?
Офлайн
Ок, “педагоги”
Я ж вас и не осуждаю за ваши методы, но да, порой мне надо разжевать, бывает туплю. Просто прошу помочь разобраться самоучке…
Ещё такая вещь - для почистки воспользовался поиском дубликатов в Тотал Коммандере - он это дело по названиям и по размеру делает быстро. Вот, хотелось бы знать, что же там за алгоритм - и бд он явно не юзает, разве что симуляцию какую-то. При этом, в процессе расло количество используемой оперативки тоталом. Под конец было чуть ли не до 100 мб… Неужто он всё держал в оперативе? Потом, со списком он мог даже сортировку проводить, а список был длинный более 100к совпадений. Очень интересно знать алгоритм.
п.с. насчёт виндузятника, мне в последнее время даже линукс стал более понятным, чем винда, но это не суть важно. Ещё многому учиться, учиться и ещё раз учиться.
Офлайн
Для почистки диска пробовал пользоваться dupkiller, но на самом деле оказалось неэффективно. Если аккуратно работаешь то вообще не возникает нужды чтото чистить.
Но тут возникает интересная задача:
Как представить информацию о найденых дубликатах?
Дело в том, что они часто возникают при копировании папок. В этом случае желательно получить не 300 сообщений (по количествую файлов в папке) о том что файлы находятся в директориях a и b, а получить сообщение что дублируются директории. Директория может иметь поддиректории. При работе может оказаться что они почти совпадают (например добавлена пара файлов) и.т.п.
Другой пример, SConscript, makefile и т.п. маркеры очень часто полностью совпадают, но они необходимы, поскольку просто указывают на поведение утилит в данной директории. Их при поиске дубликатов учитывать не нужно.
Офлайн
Master_Sergius
вы сами и ответили - держит это все в памяти, но я открою вам секрет, та же бд sqlite может работать не в файл, а в память… То что он делает это быстро ничего удивительного, ведь получить имя файла и его размер в N раз проще, чем посчитать хеш-сумму.
Офлайн
doza_and
И всякие файлы типа __init__.py тоже не нужны :)
Офлайн