使用Python的unique_everseen()方法对文件中的重复行进行去重
发布时间:2023-12-27 11:47:58
Python 提供了 itertools 模块,其中包含一个函数 unique_everseen(iterable, key=None),可以用来对文件中的重复行进行去重。这个函数返回一个迭代器,产生输入中的 项,和它们 次出现的顺序相同。
首先,我们需要准备一个示例文件,其中包含一些重复的行,以便演示去重功能。下面是一个示例文件 example.txt:
apple banana orange apple mango banana grape
在 Python 中使用 unique_everseen() 方法对文件中的重复行进行去重的代码如下:
import itertools
def unique_everseen(iterable, key=None):
seen = set()
seen_add = seen.add
if key is None:
for element in itertools.filterfalse(seen.__contains__, iterable):
seen_add(element)
yield element
else:
for element in iterable:
k = key(element)
if k not in seen:
seen_add(k)
yield element
filename = 'example.txt'
with open(filename, 'r') as file:
lines = file.readlines()
unique_lines = unique_everseen(lines)
for line in unique_lines:
print(line.strip())
输出:
apple banana orange mango grape
在上面的代码中,我们首先定义了 unique_everseen() 函数,用来实现去重功能。接着,我们打开文件并读取所有行到一个列表中。然后,我们调用 unique_everseen() 函数,传入行列表,并通过一个循环打印 行。
在 unique_everseen() 函数中,我们首先定义了一个集合 seen,用来存储已经出现过的项。然后,我们根据是否提供了 key 参数来选择不同的处理逻辑。如果 key 为 None,我们使用 filterfalse() 函数来迭代列表中不在 seen 中的项,并将其添加到 seen 集合中。如果 key 不为 None,我们使用 key 函数来获取每个元素的键,并以键的存在与否作为判断依据。
最后,我们将每个 行通过 yield 语句生成为一个迭代器,供外部的循环使用。
综上所述,我们使用 Python 的 unique_everseen() 方法来对文件中的重复行进行去重,具有简洁、高效和易于理解的特点,可以方便地处理大文件,高效地去除重复行。
