На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: RaD
  
    > Борьба с нехорошими символами в именах файлов
      Уважаемые форумчане! Требуется ваша помощь!

      Хочу разобраться с файловым хранилищем, удалить дубликаты файлов. Написал программу обходящую дерево директорий. Застрял на этапе вычисления хэшей, дело в том, что имена файлов содержат не только алфавитные символы и цифры, а также пробелы и спецсимволы. Сначала Python останавливался на первом же проблемном файле, позже я дописал try / except, и теперь он доходит до конца, пропуская проблемные файлы, но меня это не устраивает!

      Язык: Python 3

      ExpandedWrap disabled
        #! /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.
        Цитата tonchikp @
        Хочу разобраться с файловым хранилищем, удалить дубликаты файлов

        Ruby 2.4.1

        ExpandedWrap disabled
          #!/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
          Цитата JoeUser @
          Ruby 2.4.1

          С Ruby вообще не знаком, поэтому мало что понял. Но всё равно спасибо!
            ExpandedWrap disabled
              import hashlib
               
               
              def gethash(filenames):
                  temp = hashlib.md5()
                  temp.update(filenames.encode('utf-8'))
                  print(temp.hexdigest())
               
              gethash('0987654321')        #цифры
              gethash('    """"№;%№?:')  #пробелы и спецсимволы


            Вот тебе сразу и работа с hashlib и решение проблемы с плохими символами))
            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script execution time: 0,0224 ]   [ 15 queries used ]   [ Generated: 28.03.24, 14:21 GMT ]