【发布时间】:2017-10-09 22:36:13
【问题描述】:
我有一个需要从中删除重复条目的日志文件。文件中的每一行由逗号分隔的三部分组成,我们分别称它们为A、B和C。
当且仅当它们的 A 和 C 相等时,两个条目是重复的。如果发现重复,则保留 B 最大的那个。
真实日志文件行数较多,以下仅作为简化示例:
日志文件(输入):
hostA, 1507300700.0, xyz
hostB, 1507300700.0, abc
hostB, 1507300800.0, xyz
hostA, 1507300800.0, xyz
hostA, 1507300900.0, xyz
删除重复项后的日志文件(输出):
hostB, 1507300700.0, abc
hostB, 1507300800.0, xyz
hostA, 1507300900.0, xyz
我尝试将文件作为两个列表读取,然后按照以下内容进行比较:
for i in full_log_list_a:
for j in full_log_list_b:
if i[0] == j[0] and i[2] == j[2] and i[1] > j[1]:
print(', '.join(i[0]), file=open(new_file, 'a'))
我还尝试了其他一些方法,但无论我做什么,它最终都会在列表中迭代太多次并创建一堆重复条目,或者它无法仅找到具有最大 B 的项目。我知道可能有一个明显的答案,但我被困住了。有人可以指出我正确的方向吗?
【问题讨论】:
-
合理方法的每个子步骤都将基于排序(不一定是嵌套循环)。查找集合交集算法(可能还有嵌套排序/稳定排序)。大多数理智的方法也将使用 numpy 或 pandas(尽管 python 也带来了所有必要的组件)。
标签: python-3.x