我正在寻找有效的方法来加载带有数据的大文件。
该文件具有以下格式
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>
我将不胜感激。
答案 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]