0

我有一个列表列表(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()

我不确定如何向用户询问查找正确数据列表(基于给定名称)的原始输入,我也不确定如何返回电子邮件(可能在该列表后返回不同的列表索引位于?)

4

1 回答 1

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)
>>> 
于 2013-10-08T02:02:32.620 回答