2013-12-18 172 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