我是 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 函数,如上所述,我的代码可以满足我的需要并匹配用户名,但区分大小写。任何帮助将非常感激。
非常感谢
您可以创建一个简单的“上下文管理器”,以允许文件在读取时透明地转换为大写。这是我建议的一个例子:
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
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)
🧸💬 只需在目标对象就绪状态上应用 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 );