Skip to main content
 首页 » 编程设计

python之如何在 python 中解析非常大的文件

2025年05月04日15cloudgamer

我有一个非常大的 tsv 文件:1.5 GB。我想解析这个文件。我正在使用以下功能:

def readEvalFileAsDictInverse(evalFile): 
  eval = open(evalFile, "r") 
  evalIDs = {} 
  for row in eval: 
    ids = row.split("\t") 
    if ids[0] not in evalIDs.keys(): 
      evalIDs[ids[0]] = [] 
    evalIDs[ids[0]].append(ids[1]) 
  eval.close() 
 
 
  return evalIDs  

用了 10 多个小时,它还在工作。我不知道如何加速这一步以及是否有另一种方法来解析例如文件

请您参考如下方法:

这里有几个问题:

  • 使用 if ids[0] not in evalIDs.keys() 测试键在 python 2 中需要 forever,因为 keys()是一个列表。 .keys() 无论如何都很少有用。一个更好的方法已经是if ids[0] not in evalIDs,但是,但是...
  • 为什么不使用 collections.defaultdict 来代替?
  • 为什么不使用 csv 模块?
  • 覆盖内置的 eval(好吧,看看它有多危险,这不是真正的问题)

我的建议:

import csv, collections 
 
def readEvalFileAsDictInverse(evalFile): 
  with open(evalFile, "r") as handle: 
     evalIDs = collections.defaultdict(list) 
     cr = csv.reader(handle,delimiter='\t') 
     for ids in cr: 
        evalIDs[ids[0]].append(ids[1]] 

神奇的 evalIDs[ids[0]].append(ids[1]] 创建一个 list 如果不存在的话。它也是可移植的并且非常快无论 python 版本是什么并保存一个 if

我认为使用默认库不会更快,但 pandas 解决方案可能会更快。