用Python计算某个目录下所有文件的hash

This script can calculate all files' hash value on a folder, 

import hashlib
import os


def cal_file_sha256(filt_path):
    with open(filt_path, "rb") as f:
        file_hash = hashlib.sha256()
        while chunk := f.read(1024 * 1024):
            file_hash.update(chunk)
    return file_hash.hexdigest()


def cal_folder_hash(folder):
    if not os.path.exists(folder):
        print("Folder doesn't exist %s" % folder)
        return
    for file in os.listdir(folder):
        path = os.path.join(folder, file)
        if os.path.isdir(path):
            cal_folder_hash(path)
        else:
            print("File: %s" % path)
            sha256 = cal_file_sha256(path)
            print("SHA256: %s\n" % sha256)


if __name__ == "__main__":
    cal_folder_hash("D:/Docs/study/python")

 

以下是一个实现该功能的Python脚本: ```python import os import csv import hashlib def get_files_info(dir_path): file_list = [] for root, dirs, files in os.walk(dir_path): for file in files: file_path = os.path.join(root, file) file_size = os.path.getsize(file_path) mod_time = os.path.getmtime(file_path) sha256 = get_sha256(file_path) file_list.append([file, file_size, mod_time, file_path, sha256]) return file_list def get_sha256(file_path): with open(file_path, 'rb') as f: hash_obj = hashlib.sha256() while True: data = f.read(1024) if not data: break hash_obj.update(data) return hash_obj.hexdigest() def write_to_csv(file_list, csv_file): with open(csv_file, mode='w', newline='') as f: writer = csv.writer(f) writer.writerow(['File Name', 'File Size', 'Modification Time', 'File Path', 'SHA-256']) for file_info in file_list: writer.writerow(file_info) if __name__ == '__main__': dir_path = '/path/to/directory' csv_file = 'file_info.csv' file_list = get_files_info(dir_path) write_to_csv(file_list, csv_file) ``` 该脚本首先定义了`get_files_info()`函数,该函数接受一个目录路径作为参数,并使用`os.walk()`函数遍历该目录及其子目录下的所有文件。对于每个文件,该函数获取文件名、文件大小、修改时间和文件路径,并调用`get_sha256()`函数计算文件的SHA-256属性,并将这些信息存储在一个列表中。最后,该函数返回该列表。 `get_sha256()`函数接受一个文件路径作为参数,并使用Python的`hashlib`模块计算文件的SHA-256值。 `write_to_csv()`函数接受一个包含文件信息的列表和一个CSV文件名作为参数,并使用Python的`csv`模块将文件信息写入到CSV文件中。 在脚本的主程序中,我们指定要遍历的目录路径和要输出的CSV文件名,并调用`get_files_info()`和`write_to_csv()`函数。运行脚本后,CSV文件将包含文件名、文件大小、修改时间、文件路径和SHA-256属性的信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值