【发布时间】:2013-12-18 07:08:41
【问题描述】:
我正在寻找有效的方法来加载包含数据的大文件。
文件格式如下
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 实际上并没有扩展当前列表,而是创建一个新列表并重新分配,因为它非常慢。
我将不胜感激。
【问题讨论】:
-
“逐行加载文件需要很多时间,批量加载文件效率更高” - 你确定吗?你真的计时了吗? Python 以块的形式读取文件以提供行迭代器,因此您不必自己处理。
-
文件大小大约是多少?
-
@TimZimmermann,~700Mb
-
@user2357112,让我换个说法,在批次上运行
extend比每次每行运行append都要快。 -
@TimZimmermann:您可能会使用
<而不是cat的输入重定向。