Python认为在二进制读取时打开文件是空的

时间:2016-05-26 20:59:40

标签: python

我在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在执行期间不会抛出任何错误。有什么想法吗?

2 个答案:

答案 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()

如果继续建议文件为空,请告诉我