You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现CSV指定列SHA256哈希转Base64编码报错求助

解决Python哈希CSV列时的TypeError问题

问题描述

作为Python新手,目标是读取CSV文件,对指定列consumer_id使用SHA256哈希后以Base64编码输出。运行代码时出现TypeError,错误信息:

TypeError: Strings must be encoded before hashing

当前代码:

import hashlib
import csv
import base64

with open('File1.csv') as csvfile:

    with open('File2.csv', 'w') as newfile:

        reader = csv.DictReader(csvfile)

        for i, r in enumerate(reader):
            # 写入CSV表头
            if i == 0:
                newfile.write(','.join(r) + '\n')

            # 哈希'consumer_id'列
            r['consumer_id'] = base64.b64encode(hashlib.sha256(r['consumer_id']).encode('utf-8')).digest()
            
            # 写入处理后的行
            newfile.write(','.join(r.values()) + '\n')

错误原因

错误核心是哈希函数需要接收字节类型(bytes)数据,而非字符串,原代码的调用逻辑完全颠倒:

  1. 直接把字符串r['consumer_id']传给hashlib.sha256(),违反哈希函数的参数要求
  2. 错误地对哈希对象调用.encode('utf-8'),属于无效操作
  3. .digest()的调用位置错误,应该先获取哈希的字节结果,再进行Base64编码

修正后的代码

import hashlib
import csv
import base64

with open('File1.csv', 'r', encoding='utf-8') as csvfile:
    with open('File2.csv', 'w', newline='', encoding='utf-8') as newfile:
        reader = csv.DictReader(csvfile)
        writer = csv.DictWriter(newfile, fieldnames=reader.fieldnames)
        
        # 写入表头
        writer.writeheader()
        
        for r in reader:
            # 1. 将字符串编码为字节
            consumer_bytes = r['consumer_id'].encode('utf-8')
            # 2. 计算SHA256哈希
            sha256_result = hashlib.sha256(consumer_bytes).digest()
            # 3. Base64编码并转为字符串(避免写入CSV时出现字节标记)
            r['consumer_id'] = base64.b64encode(sha256_result).decode('utf-8')
            
            # 写入处理后的行
            writer.writerow(r)

关键修改说明

  • 修正编码顺序:先把字符串转为字节,再传入哈希函数,符合哈希函数的参数要求
  • 使用CSV专用写入器:替换手动拼接字符串的方式,避免字段包含逗号时出现CSV格式错误
  • Base64结果转字符串:通过.decode('utf-8')把编码后的字节转为字符串,确保写入CSV的是文本内容
  • 指定文件编码:打开文件时明确设置encoding='utf-8',避免不同环境下的编码不一致问题

内容的提问来源于stack exchange,提问作者Jeff Irwin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 02:01:57