打开 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 True
。 os.path
还有一个 isfile()
函数,除了检查路径是否为普通文件外,它做同样的事情。
*: 可以在某些操作系统上打开和读取目录(有时带有特殊标志 open()
,但这不是您想要的反正在这里做。
我试图让我的程序递归地遍历 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 True
。 os.path
还有一个 isfile()
函数,除了检查路径是否为普通文件外,它做同样的事情。
*: 可以在某些操作系统上打开和读取目录(有时带有特殊标志 open()
,但这不是您想要的反正在这里做。