MD5使用Python对CSV进行散列

MD5使用Python对CSV进行散列,python,csv,hash,Python,Csv,Hash,我有一个csv,其中包含需要以MD5格式散列的电子邮件地址,然后将散列的电子邮件另存为新的csv。我还没有看到我的确切用例,因此无法成功地修改现有的问题 原始文件路径为“/Users/[username]/Downloads/email\u Original.csv”,所需的输出文件为“/Users/[username]/Downloads/email\u hashed.csv” 原始文件 email_addr fake_email1@yahoo.com fake_email2@gmail.co

我有一个csv,其中包含需要以MD5格式散列的电子邮件地址,然后将散列的电子邮件另存为新的csv。我还没有看到我的确切用例,因此无法成功地修改现有的问题

原始文件路径为
“/Users/[username]/Downloads/email\u Original.csv”
,所需的输出文件为
“/Users/[username]/Downloads/email\u hashed.csv”

原始文件

email_addr
fake_email1@yahoo.com
fake_email2@gmail.com
fake_email3@college.edu
fake_email4@hotmail.com
fake_email5@ford.com
散列文件

email_addr
0x3731BF23851200A7607BA554EEAF7912
0xA5D5D3B99896D32BAC64162BD56BE177
0xAE03858BDFBDF622AF5A1852317500C3
0xC870F8D75180AC9DA2188129C910489B
0xD7AFD8085548808459BDEF8665C8D52A

你评论中的答案几乎是正确的。您只需
打开另一个具有write属性的文件
w
。我已将您的查询更改为将
一起使用,因此您不必显式关闭文件处理程序:

with open("/Users/[username]/Downloads/email_original.csv",'rb')  as file:
    with open("/Users/[username]/Downloads/email_hashed.csv",'w')  as output:
        for line in file: 
           line=line.strip() 
           print hashlib.md5(line).hexdigest() 
           output.write(hashlib.md5(line).hexdigest() +'\n')

Jaco的答案很好,但不完整,因为它忽略了MD5哈希的编码。如果CSV格式在将来被修改为包含其他列,那么代码也将是不够的。下面是一个示例,它解决了这两个问题,同时也使将来更改哈希变得容易,同时还指定了可以应用单个哈希算法的其他列:

import csv
import hashlib

IN_PATH = 'email_original.csv'
OUT_PATH = 'email_hashed.csv'
ENCODING = 'ascii'
HASH_COLUMNS = dict(email_addr='md5')


def main():
    with open(IN_PATH, 'rt', encoding=ENCODING, newline='') as in_file, \
            open(OUT_PATH, 'wt', encoding=ENCODING, newline='') as out_file:
        reader = csv.DictReader(in_file)
        writer = csv.DictWriter(out_file, reader.fieldnames)
        writer.writeheader()
        for row in reader:
            for column, method in HASH_COLUMNS.items():
                data = row[column].encode(ENCODING)
                digest = hashlib.new(method, data).hexdigest()
                row[column] = '0x' + digest.upper()
            writer.writerow(row)

if __name__ == '__main__':
    main()

你到底被困在哪里?这将有助于显示您当前的最佳尝试并解释具体问题。提取数据,然后使用
hashlib.md5
对其进行散列,如果它不等于
email\u addr
,然后写入文件。这不是软件写入服务。我向人们收取为他们编写应用程序的费用。但是,在展示了您的尝试之后,我们将很乐意帮助您解决您的难题。看看这个。您可以修改它以跳过第一行。你很近,真是太好了。现在,您只需要用谷歌搜索如何用python编写文件。小菜一碟。:)完美的非常感谢@JacoHey@Jaco,当我在我的实际文件上运行此程序时,它在终端中只打印7封散列电子邮件,并且只将这7封保存在“…\u hashed.csv”文件中。思考为什么它只做了几件事?没有错误。我无法在我的测试文件中复制此内容。每一行都有回车符吗?这很奇怪,但这是我这边的东西。我会调查,但代码是好的。谢谢。我在运行您的版本时遇到此错误:
回溯(最近一次调用):文件“”,第2行,在文件“”中,第2行,在主类型中错误:文件()最多接受3个参数(给定4个)
@FrankB。在Python2.x系列解释器中可能会出现此错误。如果改为在最新版本的Python 3中运行,那么代码应该很好。