Как мне хэшировать определенные столбцы из файла csv?

#python #csv #hash

#python #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')
  

введите описание изображения здесь

введите описание изображения здесь

Комментарии:

1. Ваш код не хэширует весь файл. Он хэширует данные в вашем Password столбце и записывает хэш в newfile

2. но все столбцы были хэшированы при запуске кода

3. тогда мы говорим не об одном и том же коде

4. Почему вы считаете, что все столбцы были хэшированы? Пожалуйста, добавьте некоторый код, подтверждающий это.

5. Только что добавлен скриншот обоих файлов

Ответ №1:

Поскольку ваш код показывает вашу попытку хэширования 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)