我需要使用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。
答案 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'):
仅用于测试目的。