2013-12-18 203 views
3

我正在寻找有效的方式来加载一个巨大的文件与数据。Python解析一个巨大的文件

该文件的格式如下

​​

2\tword2\tdata

3\tword3\tdata

\r\n

1\tword4\tdata

2\tword2\tdata

\r\n

其中\r\n定义了包括词句子的结尾。

我感兴趣的加载文件及存入结构,即我想指的句子,并在句子中的词,一般作为结果,我想是这样的

data = [sentence1, sentence2,... ] 

其中sentence = [word1,word2,...]

逐行加载文件占用大量时间,批量加载文件效率更高,但是我不知道如何解析数据并将其分为句子。

目前我使用下面的代码

def loadf(filename): 
    n = 100000 
    data = [] 
    with open(filename) as f: 
     while True: 
      next_n_lines = list(islice(f, n)) 
      if not next_n_lines: 
       break 
      data.extend([line.strip().split('\t') for line in next_n_lines]) 

有了这个代码,我不知道如何将数据传输到句子划分,除了我怀疑extend实际上没有扩展当前的列表,但创建一个新的一个和重新分配,因为它非常缓慢。

我将不胜感激任何帮助。

+3

“一行加载文件中的行采取了很多的时间,装载分批更有效的文件” - 你能肯定吗?你真的有时间吗? Python以块的形式读取文件以提供行迭代器,因此您不必亲自处理。 – user2357112

+0

什么是文件大小约? –

+0

@TimZimmermann,〜700Mb – user16168

回答

4

如何:

import csv 
from itertools import groupby 

with open(yourfile) as fin: 
    tabin = csv.reader(fin, delimiter='\t') 
    sentences = [[el[1] for el in g] for k, g in groupby(tabin, bool) if k] 
+0

这是惊人的,它只需要几秒钟,非常感谢你! – user16168