在python中为目录创建唯一的哈希

iheartcpp

我想在python中为给定目录创建唯一的哈希。感谢zmo提供的下面的代码为目录中的每个文件生成一个哈希,但是我如何聚合这些哈希以生成一个代表该文件夹的哈希呢?

import os
import hashlib

def sha1OfFile(filepath):
    sha = hashlib.sha1()
    with open(filepath, 'rb') as f:
        while True:
            block = f.read(2**10) # Magic number: one-megabyte blocks.
            if not block: break
            sha.update(block)
        return sha.hexdigest()

for (path, dirs, files) in os.walk('.'):
  for file in files:
    print('{}: {}'.format(os.path.join(path, file),       
sha1OfFile(os.path.join(path, file)))
伊利亚·彼得罗夫(Ilya Peterov)

正确的做法(可能是)是像这样为每个目录重新计算哈希值:

import os
import hashlib

def sha1OfFile(filepath):
    sha = hashlib.sha1()
    with open(filepath, 'rb') as f:
        while True:
            block = f.read(2**10) # Magic number: one-megabyte blocks.
            if not block: break
            sha.update(block)
        return sha.hexdigest()

def hash_dir(dir_path):
    hashes = []
    for path, dirs, files in os.walk(dir_path):
        for file in sorted(files): # we sort to guarantee that files will always go in the same order
            hashes.append(sha1OfFile(os.path.join(path, file)))
        for dir in sorted(dirs): # we sort to guarantee that dirs will always go in the same order
            hashes.append(hash_dir(os.path.join(path, dir)))
        break # we only need one iteration - to get files and dirs in current directory
    return str(hash(''.join(hashes)))

仅按顺序使用文件os.walk会给您带来的问题(就像Markus一样)是,对于包含相同文件的不同文件结构,您可能会获得相同的哈希。例如,此目录的哈希

main_dir_1:
    dir_1:
        file_1
        file_2
    dir_2:
        file_3

而这个

main_dir_2:
    dir_1:
        file_1
    dir_2:
        file_2
        file_3

会是一样的。


另一个问题是,您需要保证文件的顺序始终相同-如果以不同的顺序合并两个散列并计算所获得的字符串的散列,则对于相同的目录结构,您将获得不同的结果。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为R中的字符串创建唯一的,人类可读的标识符(哈希?)

来自分类Dev

为R中的字符串创建唯一的,人类可读的标识符(哈希?)

来自分类Dev

为自动增量字段创建唯一的用户哈希

来自分类Dev

创建一个唯一的哈希

来自分类Dev

hashmap如何确保在哈希表中为每个哈希值分配唯一索引

来自分类Dev

如何在Python中为数据框的每一行创建唯一的XML

来自分类Dev

为两个订单ID的排列创建唯一的哈希码

来自分类Dev

如何在python中为大型数据创建哈希表?

来自分类Dev

为给定类别创建唯一标识符(Python)

来自分类Dev

为给定类别创建唯一标识符(Python)

来自分类Dev

在reactmongo中为集合创建唯一索引

来自分类Dev

为Spark RDD中的每个键创建唯一的值

来自分类Dev

为IOS中的所有设备创建唯一的UUID?

来自分类Dev

在reactmongo中为集合创建唯一索引

来自分类Dev

在PHP中为每个条目创建唯一的URL

来自分类Dev

为数组中的每个项目创建唯一的单选按钮

来自分类Dev

为 Jmeter 中的每个线程创建唯一的 props 变量

来自分类Dev

Bash脚本为清单/查找命令中的每个唯一权限创建一个文件,并打印该权限的每个目录/文件路径实例

来自分类Dev

在Qt中创建目录的哈希值

来自分类Dev

用于为float []中的值生成相同的唯一ID /哈希的算法

来自分类Dev

字段中的 MySQL 唯一哈希?

来自分类Dev

为所有字谜生成相同的唯一哈希码

来自分类Dev

在ggplot中为r中的一行中的每个唯一值创建图

来自分类Dev

如何在Python中为唯一值分配值

来自分类Dev

在col中为唯一标签绘制线-Python

来自分类Dev

Python-在数组中创建唯一值的掩码

来自分类Dev

在Python中创建唯一对象数组

来自分类Dev

如何在Python类中创建唯一的增量ID

来自分类Dev

在Perl中为哈希创建增量值

Related 相关文章

  1. 1

    为R中的字符串创建唯一的,人类可读的标识符(哈希?)

  2. 2

    为R中的字符串创建唯一的,人类可读的标识符(哈希?)

  3. 3

    为自动增量字段创建唯一的用户哈希

  4. 4

    创建一个唯一的哈希

  5. 5

    hashmap如何确保在哈希表中为每个哈希值分配唯一索引

  6. 6

    如何在Python中为数据框的每一行创建唯一的XML

  7. 7

    为两个订单ID的排列创建唯一的哈希码

  8. 8

    如何在python中为大型数据创建哈希表?

  9. 9

    为给定类别创建唯一标识符(Python)

  10. 10

    为给定类别创建唯一标识符(Python)

  11. 11

    在reactmongo中为集合创建唯一索引

  12. 12

    为Spark RDD中的每个键创建唯一的值

  13. 13

    为IOS中的所有设备创建唯一的UUID?

  14. 14

    在reactmongo中为集合创建唯一索引

  15. 15

    在PHP中为每个条目创建唯一的URL

  16. 16

    为数组中的每个项目创建唯一的单选按钮

  17. 17

    为 Jmeter 中的每个线程创建唯一的 props 变量

  18. 18

    Bash脚本为清单/查找命令中的每个唯一权限创建一个文件,并打印该权限的每个目录/文件路径实例

  19. 19

    在Qt中创建目录的哈希值

  20. 20

    用于为float []中的值生成相同的唯一ID /哈希的算法

  21. 21

    字段中的 MySQL 唯一哈希?

  22. 22

    为所有字谜生成相同的唯一哈希码

  23. 23

    在ggplot中为r中的一行中的每个唯一值创建图

  24. 24

    如何在Python中为唯一值分配值

  25. 25

    在col中为唯一标签绘制线-Python

  26. 26

    Python-在数组中创建唯一值的掩码

  27. 27

    在Python中创建唯一对象数组

  28. 28

    如何在Python类中创建唯一的增量ID

  29. 29

    在Perl中为哈希创建增量值

热门标签

归档