我在Windows上运行Python 3.5.1。我试图通过计算它们的哈希在目录中找到重复的源代码文件。问题是Python似乎认为某些文件是空的。以下是相关的代码段:
with open(path, 'rb') as afile:
hasher = hashlib.md5()
data = afile.read()
hasher.update(data)
print("len(data): {}, Path: {}, Hash:{}".format(len(data), path, hasher.hexdigest()))
以下是一些示例输出:
len(data): 0, Path: h:\t\TCPServerSocket.h, Hash:d41d8cd98f00b204e9800998ecf8427e
len(data): 0, Path: h:\t\TCPSocket.cpp, Hash:d41d8cd98f00b204e9800998ecf8427e
len(data): 0, Path: h:\t\TCPSocket.h, Hash:d41d8cd98f00b204e9800998ecf8427e
len(data): 5073, Path: h:\t\ConfigFile.cpp, Hash:6188d6a0e0bc02edf27ce232689beff6
我向您保证这些文件不是空的,并且Python在执行期间不会抛出任何错误。有什么想法吗?
答案 0 :(得分:2)
如果不是这样,我会删除这个答案,但这是你需要检查的东西。将它直接放在空心块之前
print("the path is {!r}".format(path))
print("path exists: ", os.path.exists(path))
print("it is a file: ", os.path.isfile(path))
print("file size is: ", os.path.getsize(path))
因为输出中的所有内容都与该文件实际为空一致。也许是吗?我的第一个想法是你可能会把文件归零,但你很快就会明白这一点。
答案 1 :(得分:-1)
我认为你应该通过在自己的文件上调用hashlib.md5来计算哈希值
import hashlib
hashlib.md5("filename").hexdigest()
如果继续建议文件为空,请告诉我