Как переименовать файлы в каталоге с его хэшем sha1 с помощью python? - PullRequest
0 голосов
/ 09 февраля 2011

Мне нужно переименовать мои файлы в директории с ее хэшем с Python.Я сделал то же самое, используя C #:

   Console.Write("enter path");
        string path = Console.ReadLine();

        foreach (var i in Directory.GetFiles(path))
        {
            try
            {
                using (SHA1Managed sha1 = new SHA1Managed())
                {
                    FileStream f = new FileStream(i.ToString(), FileMode.Open);
                    byte[] hash = sha1.ComputeHash(f);
                    string formatted = string.Empty;
                    foreach (byte b in hash)
                    {
                        formatted += b.ToString("X2");
                    }
                    f.Close();

                    File.Move(i.ToString(), path+"//" + formatted);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(i.ToString());
            }

Может ли кто-нибудь помочь мне начать с того, что я бы использовал в Python для достижения того же?Я буду использовать Ubuntu, если это что-то изменит.

1 Ответ

3 голосов
/ 09 февраля 2011

В Python, если вы хотите вычислить некоторый хеш (MD5, SHA1), есть модуль hashlib.Для выполнения некоторых операций над файловой системой существует модуль os.В этих модулях вы найдете: sha1 объект с hexdigest() методом и listdir() и rename() функциями.Пример кода:

import os
import hashlib

def sha1_file(fn):
    f = open(fn, 'rb')
    r = hashlib.sha1(f.read()).hexdigest()
    f.close()
    return r

for fn in os.listdir('.'):
    if fn.endswith('.sha'):
        hexh = sha1_file(fn)
        print('%s -> %s' % (fn, hexh))
        os.rename(fn, hexh)

Внимание : sha1_file() Функция читает весь файл сразу, поэтому он не будет работать очень хорошо для больших файлов.В качестве домашнего задания попробуйте улучшить его для таких файлов (прочитать файл по частям и обновить хеш с этими частями).

Конечно, if fn.endswith('.sha'): используется только для целей тестирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...