Python Lambda 映射

问题描述 投票:0回答:3

我是 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 函数,如上所述,我的代码可以满足我的需要并匹配用户名,但区分大小写。任何帮助将非常感激。

非常感谢

python lambda
3个回答
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



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)



0
投票
问题:函数 lambda map 适用于文件读取内容中的大写字符。

🧸💬 只需在目标对象就绪状态上应用 lambda 函数
line = map(lambda x: x.upper(), line)


示例代码

filename = "C:\\temp\\python\\actual_data.txt"; with open (filename, "r") as file1: lines = file1.readlines(); for line in lines : line = map(lambda x: x.upper(), line); line = "".join( list(line) ); print( line );

屏幕截图

ScreenShot

© www.soinside.com 2019 - 2024. All rights reserved.