我有一个列表列表(dictionary_list),这里有3个示例列表:
{'_chk2m': 'Name1@domain.com', '_cn6ca': 'PaulDu', '_cokwr': '005C0000003yL', '_ckd7g': 'Sourcing', '_cre1l': u'Paul Dumond \xa0', '_cpzh4': 'Name1@domain.com', '_ciyn3': 'abc'}
{'_chk2m': 'Name2@domain.com', '_cn6ca': 'Jeanell', '_cokwr': '005C0000003we', '_ckd7g': 'Tech Sourcer Team', '_cre1l': u'Jeanelle Gourley \xa0', '_cpzh4': 'Name2@domain.com', '_ciyn3': 'bcd'}
{'_chk2m': 'Name3@domain.com', '_cn6ca': 'Twanna', '_cokwr': '005C0000004tB', '_ckd7g': 'Tech Sourcer Team', '_cre1l': u'Twanna Lippincott \xa0', '_cpzh4': 'Name3@domain.com', '_ciyn3': 'def'}
我想询问用户的名称并让脚本找到具有该名称的数据列表,然后将电子邮件地址返回给我。
到目前为止,我有一些代码:
def Lookup(in_path):
# read file into memory
file_obj = open(in_path, 'rb')
reader = csv.reader(file_obj, delimiter='\t')
data = []
# create a raw_input here?
for row in reader:
if any('raw_input_here' in elt for elt in row):
# something to grab/store the email address here
file_obj.close()
print 'Found', "Joe Smith's", 'email.'
conf = raw_input('save this email? (Y|N): ').upper()[0]
if conf == 'Y':
# write data to file
file_obj = open(in_path, 'wb')
writer = csv.writer(file_obj)
writer.writerows(data)
file_obj.close()
我不确定如何向用户询问查找正确数据列表的原始输入(基于给定名称),我也不确定如何返回电子邮件(可能返回不同的列表索引)一旦找到该列表?)
答案 0 :(得分:0)
eval()函数似乎能够将这些行转换为字典。关于使用eval(),网上有很多关于的警告和警告 - 您必须确保字符串中有没有恶意内容正在评估。我把你的三行数据放在一个文本文件中,这似乎有效。
from pprint import pprint
name = 'Jeanell'
with open('test_data.txt') as f:
for line in f:
try:
dictionary = eval(line.rstrip())
if name in dictionary.values():
email_address1 = dictionary['_chk2m']
email_address2 = dictionary['_cpzh4']
print dictionary['_cre1l'], email_address1, email_address2
pprint(dictionary)
except SyntaxError as e:
# a lone newline character ( '\n') at the end of the file
# is causing this
print
print e
输出结果为:
>>>
Jeanelle Gourley Name2@domain.com Name2@domain.com
{'_chk2m': 'Name2@domain.com',
'_ciyn3': 'bcd',
'_ckd7g': 'Tech Sourcer Team',
'_cn6ca': 'Jeanell',
'_cokwr': '005C0000003we',
'_cpzh4': 'Name2@domain.com',
'_cre1l': u'Jeanelle Gourley \xa0'}
unexpected EOF while parsing (<string>, line 0)
>>>