Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.145.163.58] |
|
Сообщ.
#1
,
|
|
|
Уважаемые форумчане! Требуется ваша помощь!
Хочу разобраться с файловым хранилищем, удалить дубликаты файлов. Написал программу обходящую дерево директорий. Застрял на этапе вычисления хэшей, дело в том, что имена файлов содержат не только алфавитные символы и цифры, а также пробелы и спецсимволы. Сначала Python останавливался на первом же проблемном файле, позже я дописал try / except, и теперь он доходит до конца, пропуская проблемные файлы, но меня это не устраивает! Язык: Python 3 #! /usr/bin/env python3 import subprocess try: hash = subprocess.check_output('md5sum -- "{}"'.format(file), universal_newlines=True, shell=True)[:32] except Exception: print('Проблемный файл {}'.format(file)) С hashlib пока не получается, проблем много создаёт, поэтому пока пришлось воспользоваться стандартной утилитой md5sum. Может подскажете заодно как решить проблему с применением hashlib. |
Сообщ.
#2
,
|
|
|
Цитата tonchikp @ Хочу разобраться с файловым хранилищем, удалить дубликаты файлов Ruby 2.4.1 #!/usr/bin/ruby require 'digest' # указываем путь, откуда сканировать --------------------------------- dir = "." # составляем контрольные суммы --------------------------------------- res = Hash.new [] Dir.glob("#{dir}/**/*\.*").each do |x| res[Digest::SHA2.new(256).hexdigest IO.binread(x)] += [x] end # выводим дубликаты -------------------------------------------------- res.each do |key, value| if value.size > 1 puts ">>> "+key value.each do |i| puts i end end end # вывод вот в таком примерно виде ------------------------------------ # # >>> 8d796795abbf57c8b05af28a0f072656c852391c2b16325d5abb96819dad5f45 # ./1/2.csv # ./2/2.csv |
Сообщ.
#3
,
|
|
|
Цитата JoeUser @ Ruby 2.4.1 С Ruby вообще не знаком, поэтому мало что понял. Но всё равно спасибо! |
Сообщ.
#4
,
|
|
|
import hashlib def gethash(filenames): temp = hashlib.md5() temp.update(filenames.encode('utf-8')) print(temp.hexdigest()) gethash('0987654321') #цифры gethash(' """"№;%№?:') #пробелы и спецсимволы Вот тебе сразу и работа с hashlib и решение проблемы с плохими символами)) |