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