【问题标题】:To produce new MD5 hash value for each filename为每个文件名生成新的 MD5 哈希值
【发布时间】:2018-01-06 17:27:33
【问题描述】:

VS = hashlib.md5() 中仅重复一个哈希

如何在 for 循环中为每个文件创建一个新的哈希?

import os
import hashlib

VS = hashlib.md5()    
rootDir = r"C:\Users\Ghost\Pictures\Wallpaper"

for dirName, subdirList, fileList in os.walk(rootDir, topdown=True):
    print('Directory:', dirName)
    for x in fileList:
        print('Filename: ' , x, '\t', VS.hexdigest())

输出:

Directory: C:\Users\Ghost\Pictures\Wallpaper
Filename:  0020.jpg      d41d8cd98f00b204e9800998ecf8427e
Filename:  2215.jpg      d41d8cd98f00b204e9800998ecf8427e
Filename:  55845.jpg     d41d8cd98f00b204e9800998ecf8427e
Filename:  anon.jpg      d41d8cd98f00b204e9800998ecf8427e
Filename:  Eyes_HD.jpg   d41d8cd98f00b204e9800998ecf8427e
Filename:  gow.jpg       d41d8cd98f00b204e9800998ecf8427e
Filename:  kk.png        d41d8cd98f00b204e9800998ecf8427e
Filename:  scanEQ.txt    d41d8cd98f00b204e9800998ecf8427e
Filename:  scanEQQ.txt   d41d8cd98f00b204e9800998ecf8427e
Filename:  scooby.jpg    d41d8cd98f00b204e9800998ecf8427e
Filename:  skull.jpg     d41d8cd98f00b204e9800998ecf8427e
Filename:  sniper.jpg    d41d8cd98f00b204e9800998ecf8427e

【问题讨论】:

  • 标题已汇总。解释中的句子顺序发生了变化(问题排在最后)。输出格式清晰。

标签: python python-3.x md5 os.walk hashlib


【解决方案1】:

在调用之前添加VS.update(b"new values") VS.hexdigest() 就够了:

import os
import hashlib

VS = hashlib.md5()    
rootDir = r"C:\Users\Ghost\Pictures\Wallpaper"

for dirName, subdirList, fileList in os.walk(rootDir, topdown=True):
    print('Directory:', dirName)
    for x in fileList:
        VS.update(b"new values")
        print('Filename: ' , x, '\t', VS.hexdigest())

输出:

Directory: C:\Users\Ghost\Pictures\Wallpaper
Filename:  0020.jpg      f93df400b2ca81f10a783efaaaa15dc0
Filename:  2215.jpg      6d615abb988407790f84813935cd30c4
Filename:  55845.jpg     552ee02489464cbc4275c4c8c3b0b6dc
Filename:  anon.jpg      7f010718dca450358704027ef6795cae
Filename:  Eyes_HD.jpg   d757c27c29aa9d0fc20fd4de3ff2115f
Filename:  gow.jpg       62f85bab1e15431a3220558c26770f09
Filename:  kk.png        b72aa5609f8dbde778e106a9c5057e23
Filename:  scanEQ.txt    93fedeb3f78a79aa81b76a2e5d58d08d
Filename:  scanEQQ.txt   4d7c1e81a60a43beb682a9840d74a93b
Filename:  scooby.jpg    ec3f07d0cd4e6041a3fed6da097abeab
Filename:  skull.jpg     79df1ae5c8e66b7a3836f2df7939e53e
Filename:  sniper.jpg    9b0571e08b0621107636216ec22fe710

【讨论】:

    【解决方案2】:

    我想我有一个这样的目录:

    test
    ├── callfoo.py
    ├── folder
    │   ├── __init__.py
    │   ├── __pycache__
    │   │   ├── __init__.cpython-35.pyc
    │   │   └── submodule.cpython-35.pyc
    │   └── submodule.py
    └── inherit.py
    
    2 directories, 6 files
    

    你可以这样做:

    import os
    import hashlib
    
    def md5_checksum(path, size=1024):
        VS = hashlib.md5()
        with open(path, 'rb') as f:
            for chunk in iter(lambda: f.read(size), b''):
                VS.update(chunk)
        return VS.hexdigest()
    
    
    rootDir = r"/home/nexus/Bureau/stack/test"
    size = 1024
    
    for dirName, subdirList, fileList in os.walk(rootDir, topdown=True):
        for _file in fileList:
            path = dirName + '/' + _file
            checksum = md5_checksum(path, size)
            print('File: {0} \t {1}'.format(_file, checksum))
    

    输出:

    File: callfoo.py     52cf7effa72135d50d8389bc81c73672
    File: inherit.py     919a85d8976d67eea97562a4f8a7e2b9
    File: submodule.py   3be5b4123199df6a01b368f2f343821c
    File: __init__.py    d41d8cd98f00b204e9800998ecf8427e
    File: __init__.cpython-35.pyc    2e4511c482f711fe68bdc825ce658375
    File: submodule.cpython-35.pyc   f93d319156617e2cfca3cee88edfcc2a
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-27
      • 1970-01-01
      • 2013-09-08
      • 1970-01-01
      • 2017-05-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多