Python迭代器,一行一行读取文本

在处理文本的时候,首先要做的是读取一下文本文件,一般的方法如下:

corpus = open('这个位置放文件绝对路径', 'r').readlines()

将这个文本文件按行读取,每行一个元素放到一个list中。但是需要将整个文本文件先全部装入内存中。

如果文本文件太大,不能一次性读入内存怎么办。要使用Python中的迭代器,一次读取一个成员,然后对这个成员进行某种操作就可以了。

具体方法如下:

class Load_Corpus_with_Iteration(object): # 使用迭代器读取语料库
    def __init__(self, path):
        self.path = path

    def __iter__(self):
        for line in open(self.path):
            yield line.split()

corpus = Load_Corpus_with_Iteration('/Users/John/Desktop/yelp_dataset_challenge_academic_dataset/review_text.txt')
for item in corpus:
    print item

我没有将全部的文本文件装入内存,而是每次只指向迭代器的下一个指针位置,对这个指针位置进行某种操作(上面的代码中进行了split()操作),操作完后,内存的指针不变,等待下一次操作。在主函数中,我们生成了一个对象corpus并使用for循环进行迭代,每次迭代都会调用一次yield方法,也就是说每次都会对内存中的这行文件进行一次操作,print完后立即释放,不存在之前使用readlines()将内存用爆的问题了。

上面只是个小例子,如果要对每行文本进行去停用词等操作,我之后会在下面的代码中放出,敬请期待:

你可能感兴趣的:(Python学习)