只有一个哈希值从VS = hashlib.md5()
重复
如何为 for 循环中的每个文件创建新的哈希?
import os
import hashlib
VS = hashlib.md5()
rootDir = r"C:UsersGhostPicturesWallpaper"
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:UsersGhostPicturesWallpaper
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
我想我有一个这样的目录:
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
只需添加
VS.update(b"new values")
,然后再调用VS.hexdigest()
就足够了:
import os
import hashlib
VS = hashlib.md5()
rootDir = r"C:UsersGhostPicturesWallpaper"
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:UsersGhostPicturesWallpaper
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