如果数据框中充满了文件路径,而我想为每个文件创建哈希值
代码看起来像这样:
def generate_hash(path):
path = paht['path']
BLOCK_SIZE = 10485760
file_hash = hashlib.sha256()
with open(file, 'rb') as f:
fb = f.read(BLOCK_SIZE)
while len(fb) > 0:
file_hash.update(fb)
fb = f.read(BLOCK_SIZE)
return file_hash.hexdigest()
df['hash'] = df.apply((generate_hash, axis=1)
每个文件都会生成相同的哈希,并且df如下所示:
path hash
0 /path/file_1 09b85c3f91d4fc5fe88610acad1094d064b253ebfacf26ed2cb16c4e89468504
1 /path/file_2 09b85c3f91d4fc5fe88610acad1094d064b253ebfacf26ed2cb16c4e89468504
2 /path/file_3 09b85c3f91d4fc5fe88610acad1094d064b253ebfacf26ed2cb16c4e89468504
3 /path/file_4 09b85c3f91d4fc5fe88610acad1094d064b253ebfacf26ed2cb16c4e89468504
4 /path/file_5 09b85c3f91d4fc5fe88610acad1094d064b253ebfacf26ed2cb16c4e89468504
但是由于它们是不同的文件,因此它们不应生成相同的哈希值,而当我仅在for loop
中的路径上迭代时,哈希值将正确生成
此代码:
for file in glob.glob('path/**', recursive=True):
print(file)
print(generate_hash(file))
产生预期的结果:
/path/file_1
fdf755afcb1a4a38474ab1f2bca4969eec6e3dac09772559f473c33915b1323d
/path/file_2
957c584f39d2a8938174a9b715b9d67998ebb7ba94619f15e076a5c649714067
/path/file_3
fab912b026cbd2ba4c507ffa6f996e862133e1db2c705881819fa258eb76bebc
/path/file_4
d7dc9e575e4e36ed5542e9102044926598b0a600e1e0f59db3993be53518b7e6
/path/file_5
09b85c3f91d4fc5fe88610acad1094d064b253ebfacf26ed2cb16c4e89468504
因此在df示例中,每一行都获得file_5
的实际哈希值,我在这里缺少什么?pn
答案 0 :(得分:1)
您必须将open(file, 'rb')
替换为open(path, 'rb')
,这里path
代表传递给{{1的当前序列path
中s
的值}}功能。
使用:
generate_hash