比较大CSV文件行与其他行Python内存问题

2024-06-28 19:39:25 发布

您现在位置:Python中文网/ 问答频道 /正文

对于Python,我相对比较天真,所以对于任何不相关的语句,我深表歉意。在

我有一个CSV文件,大约有500k行,我正在处理。(约60 MB)

当我读入文件时,我需要做一些基本的清理,这很好,但我还需要将CSV的每一行与同一文件的其他行进行比较。最初,我加载了文件并将其存储在一个列表中,然后循环两次以比较行。这可能是个愚蠢的方法,因为我很快就耗尽了记忆。看起来像这样:

for row in self.trainingdata:
        for row2 in self.trainingdata:
            # Do Stuff

我的问题是,什么是最节省内存的方法?我是否应该打开同一个文件两次,然后比较每一行?或者有更好的方法来存储数据吗?我正在寻找一些关于什么是最佳方法的高级指导。我目前的想法如下,但我还没有完成:

^{pr2}$

谢谢你的帮助!在


Tags: 文件csv方法记忆inself列表for
2条回答

正如@Padraic指出的,这个文件不够大,不必担心内存不足。关于执行您想要的操作的最佳方法是使用字典,如下面的代码示例所示:

dictio = {}
file2 = open(file)
for line in file2.readlines():
    parts = line.split(' ')
    if parts[0] in dictio:
        print('duplicate ' + line)
    else:
        dictio[parts[0]] = parts[1]

其中parts[0]只是行中的一个随机部分,用于标识唯一性,您可以使用任何条件作为字典的键

你在用unix吗?那么sort -u呢,或者如果只需要根据某个列值sort -t',' -k1,1 -u进行uniquize呢?当文件增长时,添加类似-S500MB的内容来保持RAM中的排序。。。在

相关问题 更多 >