打开 Python 中的系统文件进行散列 Windows 7

Opening system files in Python for hashing Windows 7

我试图让我的程序递归地遍历 C:\Windows 目录,并获取许多细节,包括文件的 md5 校验和。它工作得很好,除了它无法获得获取文件校验和的权限这一事实。这个函数是从我的主函数调用的,变量 filename 是试图被散列的文件的完整路径。错误发生在 f = open(filename,'rb') 行,错误为:

---> 84     f = open(filename,'rb')
 85     for chunk in iter(lambda: f.read(128*md5.block_size),b''):
 86         md5.update(chunk)

IOError: [Errno 13] Permission denied: 'C:\Windows\Microsoft.NET' 

函数如下:

def checksum_md5(filename):
    md5 = hashlib.md5()
    f = open(filename,'rb')
    for chunk in iter(lambda: f.read(128*md5.block_size),b''):
        md5.update(chunk)
        return md5.hexdigest()

程序不会更改文件,它只需要读取文件并获取校验和。我怎样才能让它工作?它一直工作到 C:\Windows\Microsoft.NET 目录,并且按预期工作。

非常感谢!

-高尔夫球手

正如您在评论中指出的那样,您尝试打开的对象是一个目录,而不是一个文件。 Windows 不允许您打开和读取这样的目录。*

要确定对象是否为目录,请使用 os.path.isdir() 函数。如果您传递给它的路径是目录,它将 return Trueos.path 还有一个 isfile() 函数,除了检查路径是否为普通文件外,它做同样的事情。


*: 可以在某些操作系统上打开和读取目​​录(有时带有特殊标志 open(),但这不是您想要的反正在这里做。