在Python中处理和搜索大文件

0 投票
4 回答
1029 浏览
提问于 2025-04-16 11:53

抱歉如果这个问题之前已经有人问过,但我找不到相关的页面来描述这个过程。我想做的是把一个大文件(纽约时报语料库)转换成一个单词列表,使用split函数,然后在这个长长的列表中搜索特定的单词。我已经能用这段代码让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')

但是,我不想把纽约时报的内容复制粘贴到括号里(这样做不行,因为文件太大了)。我更希望能把文件的内容直接加载到一个变量里。

再次抱歉,如果这个问题之前有人问过,可能性很大。

4 个回答

0

看看 nltk 吧。这个项目非常庞大,里面有很多处理文本数据的工具。这个项目是用Python语言写的,可以在 http://www.nltk.org/ 找到。

0

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

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

如果你打算对文字进行更复杂的处理,建议你看看这个叫做 NLTK 的工具包。

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

撰写回答