0

我是 python 新手,我想弄清楚 lambda 函数的使用。我需要匹配的文本文件中有两个网络用户名列表。到目前为止我的代码工作正常(它与名称匹配,但区分大小写),但是这两个文件中的文本都是大写和小写的混合体。我可能在一个列表中有 smith, john(财务),而在另一个列表中有 SMITH,John(财务)。将有数百个用户文本文件。我需要做的是规范化两个列表(例如大写),以便无论大小写如何都会发生匹配。我缺乏python知识阻碍了我。我有以下

with open (filename, "r") as file1:
    #file1m=map(lambda x: x.upper(),file1)
    for line in islice(file1,20,None)
        with open ("c:\\userlists\test.txt", "r") as file2:

但是,老实说,我不知道 lambda 函数在那段代码中的位置。我已经在你看到哈希的地方试过了,但是 python 似乎从来没有让用户名匹配。我知道我需要做大写的 file2,但是对于这个测试,为了简化我的过程,我在 test.txt 中添加了一些大写的名称,看看它是否有效。如果没有 lambda 函数,如前所述,我的代码可以满足我的需要并匹配用户名,但区分大小写。任何帮助将非常感激。

非常感谢

4

2 回答 2

1

您可以创建一个简单的上下文管理器,以允许在读取文件时将文件透明地转换为大写。这是我建议的一个例子:

from itertools import imap

class OpenUpperCase(object):
    def __init__(self, *args, **kwargs):
        self.file = open(*args, **kwargs)
    def __enter__(self):
        return imap(lambda s: s.upper(), self.file)
    def __exit__( self, type, value, tb ):
        self.file.close()
        return False  # allow any exceptions to be processed normally

if __name__ == '__main__':
    from itertools import islice

    filename1 = 'file1.txt'
    with OpenUpperCase(filename1, "r") as file1:
        for line in islice(file1, 20, None):
            print line,  # will be uppercased
于 2013-05-30T14:40:03.510 回答
1

您可以使用它来将文件转换为大写。然后你可以对他们做你想做的事。或者您可以将下面的代码用作一个想法,并对其进行调整以适应您正在尝试做的事情。

file1 = "C:/temp/file1.txt" # first file
file2 = "C:/temp/file2.txt"  # second file

m_upper = lambda x: x.upper() # uppercase lambda function.

# open the files, read them, map using the mapper,
# and write them back with append.
def map_file(file_path, append='_upper', mapper=m_upper):
    file_name, ext = file_path.rsplit('.', 1)
    new_fp = '%s%s.%s' % (file_name, append, ext)
    with open(file_path) as f_in, open(new_fp, 'w') as f_out:
        f_out.write(''.join(map(mapper, f_in)))

map_file(file1) # file1.txt -> file1_upper.txt (all uppercase)
map_file(file2) # file2.txt -> file2_upper.txt (all uppercase)
于 2013-05-30T12:47:47.447 回答