首页 > 解决方案 > 如何散列 csv 文件中的特定列?

问题描述

我正在尝试对第 2 列和第 8 列进行哈希处理,但我最终对整个文件进行了哈希处理。我的代码有什么问题?

import csv
import hashlib


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

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

        reader = csv.DictReader(csvfile)

        for r in reader:

            hashing = hashlib.sha256((r['Password']).encode('utf-8')).hexdigest()

            newfile.write(hashing + '\n')

在此处输入图像描述

在此处输入图像描述

标签: pythoncsvhash

解决方案


由于您的代码仅显示您尝试对Password列进行哈希处理,因此以下代码仅对Password列进行哈希处理。

import csv
import hashlib

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

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

        reader = csv.DictReader(csvfile)

        for i, r in enumerate(reader):
            #  writing csv headers
            if i is 0:
                newfile.write(','.join(r) + '\n')

            # hashing the 'Password' column
            r['Password'] = hashlib.sha256((r['Password']).encode('utf-8')).hexdigest()

            # writing the new row to the file with hashed 'Password'
            newfile.write(','.join(r.values()) + '\n')

您的代码的问题在于这一行newfile.write(hashing + '\n'),因为它只将散列密码写入文件(没有其他列)。此外,您没有将 CSV 标头写入新文件。


我强烈建议使用Pandas

import pandas as pd
import hashlib

# reading CSV input
df = pd.read_csv('UserInfo.csv')

# hashing the 'Password' column
df['Password'] = df['Password'].apply(lambda x: \
        hashlib.sha256(x.encode('utf-8')).hexdigest())

# writing the new CSV output
df.to_csv('UserInfo_Hashed.csv', index=False)

推荐阅读