如果在CSV列表中找到了值,则打印字典键

时间:2018-10-03 13:51:18

标签: python csv dictionary md5 apache-tika

我对python还是很陌生,所以如果这是一个简单问题的冗长解释,请原谅我。我需要一些帮助,以了解如何使用字典从csv列表中查找匹配项,然后在报告类型输出中打印密钥。

目标:我有一个明文隐私数据列表,例如社会保险号。我需要比较该明文的哈希值,同时将明文混淆到最后4位数字(XXX-XX-1245)。如果从明文哈希到CSV查找中已经存在的哈希匹配,我将执行一个微型报告,将找到的哈希可能属于的人口统计信息链接起来。另外,由于不容易,因此迷你报告中需要打印模糊的SPI值。

如果我刚刚生成的哈希值与我的电子表格中第2列的哈希值匹配,则

输出应如下所示:

user@gmail.com Full Name Another Full Name xxx-xx-1234  location1 location2

问题:所有哈希,混淆和匹配操作均已完成并存储在列表中,并且可以正常运行。我需要帮助,弄清楚如何从字典以及下面的其他列中打印键,而不必每次在for循环中都打印整个集合。

这在我的阅读器之外起作用:

 for i in hashes_ssnxxxx:
        print(i)

但我不知道如何获取该值并将其放在阅读器内部的print语句中。

clear_text_hash = [] #Where Hash of clear text value found is stored
obfuscate_xxxxssn = [] #Where obfuscated SPI found by using re.sub is stored

#Zip them in a dictonary to keep the two related
hashes_and_ssnxxxx = dict(zip(obfuscate_xxxxssn,clear_text_hash))

book_of_record = open('path\to\bookofrecord.csv', 'rt',  encoding='UTF-8')
a1 = csv.reader(book_of_record, delimiter=',')

for row in a1:
    hashes = row[2] 
    if hashes in hashes_ssnxxxx.values():
        print(row[16], row[6], hashes_ssnxxxx.keys(), row[13], row[35], row[18], row[43])

更新[已解决] 使用@tianhua liao建议的列表理解,所有需要的是:

if hashes in hashes_ssnxxxx.values():
     obfuscate = [k for k,v in hashes_ssnxxxx.items() if hashes == v]
     print(row[16], obfuscate, row[6], row[13], row[35], row[18], row[43])

1 个答案:

答案 0 :(得分:0)

实际上,我不确定您真正的问题是什么。如果您能给我们一些简单的hashes_ssnxxxxhashes示例,那就更好了。

在这里,我只给出一些猜测的答案。 判断为if hashes in hashes_ssnxxxx.values():之后,您要从hashes_ssnxxxx.keys()打印一些相对键,而不是全部打印。

也许您可以使用一些列表理解来做到这一点。就像

[keys for key,vals in hashes_ssnxxxx.items() if hashes == vals]

该代码的输出是一个列表。如果想使其更具可读性,也许您需要使用一些索引[0]','.join()来打印它。