【发布时间】:2019-07-18 12:16:04
【问题描述】:
这是我最近关于在 SAS 和 python 中计算 md5 哈希的问题的后续内容。所以,我使用的是 SAS v9.2,并且有一个 md5 散列函数,它接受一个字符串并返回一个散列。不过,我真正想要的是一种计算整个文件的哈希值的方法。鉴于我对每条记录都有一个哈希,有没有办法做到这一点,并使文件哈希与使用 python 代码获得的值匹配。以 sashelp.shoes 数据集为例,我将其导出为 CSV 文件,并手动删除了货币字段的双引号和美元以及逗号。然后我使用这个 python 代码计算了整个文件的哈希值:
filename = "f:/test/shoes.csv"
md5_hash = hashlib.md5()
with open(filename,"rb") as f:
# Read and update hash string value in blocks of 4K
for byte_block in iter(lambda: f.read(1024*1024),b''):
md5_hash.update(byte_block.replace(b'\r', b'').replace(b'\n', b''))
print(md5_hash.hexdigest())
并将此哈希作为输出返回:
f7f205b5b844bf57f5f51685969e0df0
如果有人可以在 SAS 中为该数据集复制这个最终哈希值,那就太好了。
PS 我使用的是 SAS V9.2
【问题讨论】:
-
如果您的文件小于 32k 字节,您可以在常规数据步中执行此操作,因为字符变量(仍然!)限制为 32767 个字符。否则,您可以使用
proc ds2执行此操作,它允许更多数据类型(包括更长的字符串)。