社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

如何在python中生成与OS无关的文件散列?

kng • 5 年前 • 457 次点击  

我正在尝试使用python中的hashlib库,通过将文件内容读取为4096B的二进制块来散列文件。

更有趣的是,该文件存在于git repo中,当从Windows和Mac推送到远程服务器时,它会为这两种情况生成不同的散列。

这是下面生成不同散列的代码。

def get_file_hash(file_path: str) -> str:
    hash_md5 = hashlib.md5()
    with open(file_path, "rb") as f:
        for chunk in iter(lambda: f.read(4096), b""):
            hash_md5.update(chunk)
    return hash_md5.hexdigest()

作为快速修复,我们将“\r\n”替换为“\n”

def get_file_hash(file_path: str) -> str:
    hash_md5 = hashlib.md5()
    with open(file_path, "r") as f:
        for chunk in f.readlines():
            encoded_chunk = chunk.encode("utf-8").replace(b"\r\n", b"\n")
            print(encoded_chunk)
            hash_md5.update(encoded_chunk)
    return hash_md5.hexdigest()

这是一种强有力的方法吗?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/53593
 
457 次点击  
文章 [ 1 ]  |  最新文章 5 年前
progmatico
Reply   •   1 楼
progmatico    6 年前

看起来你在散列文本文件。

import hashlib

def get_file_hash(file_path: str) -> str:
    hash_md5 = hashlib.md5()
    with open(file_path, "rt") as f:
        for line in f.readline():
            hash_md5.update(line.encode('utf-8'))
    return hash_md5.hexdigest()

print(get_file_hash('file.txt'))

Python将换行符读取为通用的 \n