如何用python的sha1哈希重命名目录中的文件?

时间:2011-02-09 07:50:57

标签: python hash

我需要使用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 个答案:

答案 0 :(得分:3)

在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'):仅用于测试目的。