相同文件的 Python 哈希值不同

乔什·弗里德兰德

我编写了一个简单的 Python 脚本来将文件从一个地方复制到另一个地方。(这是为了课堂,所以这就是为什么我不使用更简单的东西,比如shutil。我在最后有一个比较两个文件的哈希值的检查,它始终告诉我它们是不同的,即使复制成功 -两者都是显示“hello world”的文本文件。

这是我的代码:

import os

def validity_checker(address1, dest_name):
    try:
        src = open(address1, 'rb')
        dest = open(dest_name, 'wb+')
    except IOError:
        return False
    return True


def copaste(address1, address2):
    # concatenate address2 into filename
    file_ending = address1.split('\\').pop()
    dest_name = address2 + '\\' + file_ending

    # copy file after calling checker
    if validity_checker(address1, dest_name):
        src = open(address1, 'rb')
        dest = open(dest_name, 'wb+')
        contents = src.read()
        dest.write(contents)
        src.close()
        dest.close()
    else:
        print("File name bad. No action taken")

    print src
    print dest
    print(hash(src))  #hash the file not the string
    print(hash(dest))
    return

和输出:

<closed file 'C:\\Users\\user\\Downloads\\hello.txt', mode 'rb' at 0x04B7D1D8>
<closed file 'C:\\Users\\user\\Downloads\\dest\\hello.txt', mode 'wb+' at 0x04C2B860>
-2042961099
4991878

加上文件被复制。

我相当确定哈希正在检查文件本身,而不是字符串。这可能与元数据有关吗?任何帮助将不胜感激。

马丁·彼得斯

您正在使用Python 特定的 hash()函数,它计算用于字典键和set内容的哈希值

对于文件对象,hash()基于对象标识;你不能以其他任何东西为基础,因为两个不同的文件对象永远不会相等只有当两个对象在内存中是一个并且相同时,该fileobject.__eq__方法才返回Trueis也是如此)。文件内容、文件名、模式或任何其他对象属性在生成的哈希值中不起作用。

从功能文档:

返回对象的哈希值(如果有)。哈希值是整数。它们用于在字典查找期间快速比较字典键。

如果您需要验证文件副本是否包含相同的数据,则需要使用加密散列函数对 • 文件内容* 进行散列,这是完全不同的。使用hashlib模块对于您的用例,简单快速的MD5算法将执行以下操作:

for closed_file in (src, dest):
    with open(closed_file.name, 'rb') as reopened:  # opened in binary mode!
        print(reopened.name)
        print(hashlib.md5(reopened.read()).hexdigest())

如果两个文件的二进制内容完全相同,那么它们的加密哈希值也将相同。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

来自不同文件的哈希值始终相同

来自分类Dev

从相同文件vs不同文件vs __init__.py实例化python类

来自分类Dev

相同文件,不同文件大小

来自分类Dev

具有相同哈希值的不同python Frozensets

来自分类Dev

在不同文件夹中找到具有相同包结构的python加载模块

来自分类Dev

不同目录中的Python脚本使用导入中断所在的相同文件

来自分类Dev

相同文件,每次读取内容不同

来自分类Dev

来自不同文件的python类继承

来自分类Dev

python安装中不同文件的用途

来自分类Dev

为什么不同的UI显示相同文件的大小不同?

来自分类Dev

不同文件中的相同功能返回不同的结果

来自分类Dev

不同文件中的相同CSS使页面加载不同

来自分类Dev

使用.gitignore忽略不同文件夹中的相同文件

来自分类Dev

如何在不同目录中包含相同文件?

来自分类Dev

在不同分支中比较相同文件的正确方法

来自分类Dev

在不同机器上编辑相同文件的建议

来自分类Dev

不同模型使用相同文件表的 Laravel 关系

来自分类Dev

Python-遍历不同文件夹中的文件

来自分类Dev

DefaultPasswordHasher为相同的值生成不同的哈希

来自分类Dev

如何根据两个不同文本文件中的相同行打印值

来自分类Dev

从bash-scipt中具有相同文件名的不同文件夹中加载多个文件

来自分类Dev

如何从 Python 中的不同文件更改函数中变量的值?

来自分类Dev

在Python中的不同文件中分隔类

来自分类Dev

在pytest中引入多个不同文件路径的Python方式

来自分类Dev

如何从python中的不同文件调用类和函数

来自分类Dev

如何运行python脚本作为不同文件的循环?

来自分类Dev

当多个进程尝试在两个不同文件系统之间转换相同文件时会发生什么?

来自分类Dev

从目录中读取具有Python中相同文件扩展名的多个文件的文件

来自分类Dev

即使提供了不同的URL,也会下载具有相同名称的相同文件

Related 相关文章

  1. 1

    来自不同文件的哈希值始终相同

  2. 2

    从相同文件vs不同文件vs __init__.py实例化python类

  3. 3

    相同文件,不同文件大小

  4. 4

    具有相同哈希值的不同python Frozensets

  5. 5

    在不同文件夹中找到具有相同包结构的python加载模块

  6. 6

    不同目录中的Python脚本使用导入中断所在的相同文件

  7. 7

    相同文件,每次读取内容不同

  8. 8

    来自不同文件的python类继承

  9. 9

    python安装中不同文件的用途

  10. 10

    为什么不同的UI显示相同文件的大小不同?

  11. 11

    不同文件中的相同功能返回不同的结果

  12. 12

    不同文件中的相同CSS使页面加载不同

  13. 13

    使用.gitignore忽略不同文件夹中的相同文件

  14. 14

    如何在不同目录中包含相同文件?

  15. 15

    在不同分支中比较相同文件的正确方法

  16. 16

    在不同机器上编辑相同文件的建议

  17. 17

    不同模型使用相同文件表的 Laravel 关系

  18. 18

    Python-遍历不同文件夹中的文件

  19. 19

    DefaultPasswordHasher为相同的值生成不同的哈希

  20. 20

    如何根据两个不同文本文件中的相同行打印值

  21. 21

    从bash-scipt中具有相同文件名的不同文件夹中加载多个文件

  22. 22

    如何从 Python 中的不同文件更改函数中变量的值?

  23. 23

    在Python中的不同文件中分隔类

  24. 24

    在pytest中引入多个不同文件路径的Python方式

  25. 25

    如何从python中的不同文件调用类和函数

  26. 26

    如何运行python脚本作为不同文件的循环?

  27. 27

    当多个进程尝试在两个不同文件系统之间转换相同文件时会发生什么?

  28. 28

    从目录中读取具有Python中相同文件扩展名的多个文件的文件

  29. 29

    即使提供了不同的URL,也会下载具有相同名称的相同文件

热门标签

归档