在python中的大文件中操作和搜索

时间:2011-02-15 18:45:07

标签: python search file

如果已经回答了这个问题我很抱歉,但我似乎无法找到描述此过程的页面。我要做的是采取一个大文件(纽约时代语料库),使用拆分功能将其更改为单词列表,然后在该长列表中搜索某些单词。我已经能够让python用这段代码打印文件

words=open('nyt.txt')
for line in words:
    print (line)

但我希望以后可以在这个函数上使用words.split()。

到目前为止,我一直在使用我刚刚输入的小型语料库来开发程序

words= ('A B. C D E F G A. B C D E F G A B C D E F G A B C D E F G')

但是,而不是将nyt复制并粘贴到括号中(这不起作用,文件太大)。我宁愿让它将文件源化为变量名。

如果有可能,我很抱歉,如果之前有人问过并回答过这个问题。

4 个答案:

答案 0 :(得分:1)

您可能想要的是一个生成器。在您的情况下,它可能如下所示:

def words(lines):
    for line in lines:
        for word in line.split():
            yield word

这会逐行处理文件,因此不必一次将整个文件读入内存。 yield关键字将函数结果转换为生成器。用法:

import sys
for word in words(sys.stdin):
    print word

编辑:如果我这次正确理解你,你只想把所有单词都读成一个列表?很容易:

lines = open('nyt.txt')
words = []
for line in lines:
    words.extend(line.split())
print words

答案 1 :(得分:0)

看看nltk。这是一个庞大的项目,它有工具与语料库一起工作。该项目是用Python编写的,可在http://www.nltk.org/获得。

答案 2 :(得分:0)

我不确定你想要什么,但是你在找这样的东西吗?

words = open('README')
word_list = []
for l in words:
     word_list.append(l)

如果你要用语言做更复杂的事情,你应该看一下NLTK包。

答案 3 :(得分:0)

计算目标词在语料库中出现的次数

corpus = ('A B C A B C', 'A D')
target = {'A':0, 'D':0}
# also works for a file
# for line in open('file.txt'):
for line in corpus:
    for word in line.split():
        if word in target:
            target[word] += 1
for (word, count) in target.iteritems():
    print 'word "' + word + '" occurs ' + str(count) + ' times'

引来了

word "A" occurs 3 times
word "D" occurs 1 times