【发布时间】:2016-03-09 20:39:34
【问题描述】:
我被困在一个项目的某个部分,我需要消除一个 1.62 亿行长的文件中的重复行。我已经实现了以下脚本(但它并没有摆脱所有重复的行):
lines_seen = set() # holds lines already seen
outfile = open('C:\\Users\\Lucas\\Documents\\Python\\Pagelinks\\pagelinkSample_10K_cleaned11.txt', "w")
for line in open('C:\\Users\\Lucas\\Documents\\Python\\Pagelinks\\pagelinkSample_10K_cleaned10.txt', "r"):
if line not in lines_seen: # not a duplicate
outfile.write(line)
lines_seen.add(line)
outfile.close()
我需要编写一个正则表达式来消除任何重复的行!任何帮助将不胜感激,谢谢!
编辑:我将 1.62 亿行插入 MS SQL 2014。使用批量插入时,它会通知我有重复条目作为错误消息。
也许它不起作用,因为我的方法将“看到”的行存储在内存中,然后继续扫描,最终因为文件太大而耗尽内存?
【问题讨论】:
-
您确定您认为重复的行实际上是重复的吗?
-
这段代码看起来很正确。查看recipe 的
unique_everseen。 -
它们是否需要与原始文件的顺序相同?
-
实际上
set(至少在python中)已经使用hash来优化它们对内存的影响。 (根据我刚才使用unique.__sizeof__()和sum(i.__sizeof__() for i in unique)的测试)