0

我有一个加载了单词的文件,假设我只想读取以“M”开头的那些(例如)以提高内存效率,我可以这样做还是需要读取完整的文件并在之后进行过滤?

谢谢

4

3 回答 3

2

如果您的文件是换行符分隔的单词列表,您可以执行

words_starting_in_M = []
with open(filepath) as wordsfile:
    for line in wordsfile:
        if line.startswith("M"):
            words_starting_in_M.append(line.rstrip())

尽管您必须读取整个文件,但您避免将其全部保存在内存中,因此您可以获得内存效率。

于 2013-09-28T19:12:43.807 回答
0

在这枚硬币的另一面,如果您计划在同一个文件上多次使用,您可以存储在字典中以在恒定时间内进行查找(尽管内存效率为 O(n)):

from collections import defaultdict

word_lists = defaultdict(list)

with open(filepath) as myfile:
    for line in myfile:
        for word in line.split():
            word_lists[word[0].lower()].append(word)
于 2013-09-28T19:30:23.720 回答
0

您需要阅读整个文件,因为这是解析单词并确定它是否有 M 的唯一方法。

你可以做你想做的事:

words_starting_in_M = []
with open(filepath) as myfile:
    for line in myfile:
        for word in line.split():
            if word.startswith("M"):
                words_starting_in_M.append(word.rstrip())

此代码读取一行(假设没有单词被分成两行或多行)。然后它用空格分割每一行,然后将那些以 M 开头的单词添加到 words_starting_in_M。

于 2013-09-28T19:12:56.757 回答