Python解析一个巨大的文件

时间:2013-12-18 07:08:42

标签: python file parsing

我正在寻找有效的方法来加载带有数据的大文件。

该文件具有以下格式

1\tword1\tdata

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实际上并没有扩展当前列表,而是创建一个新列表并重新分配,因为它非常慢。 / p>

我将不胜感激。

1 个答案:

答案 0 :(得分: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]