Python 仅从文件中读取某些内容

Python 仅从文件中读取某些内容,python,file-io,Python,File Io,我有一个加载了单词的文件,比如说,为了节省内存,我只想读取以“M”(例如)开头的单词,我可以这样做吗?还是需要读取完整的文件并在之后进行过滤 如果您的文件是一个新行分隔单词列表,那么您可以执行以下操作,谢谢 words_starting_in_M = [] with open(filepath) as wordsfile: for line in wordsfile: if line.startswith("M"): words_starting_

我有一个加载了单词的文件,比如说,为了节省内存,我只想读取以“M”(例如)开头的单词,我可以这样做吗?还是需要读取完整的文件并在之后进行过滤


如果您的文件是一个新行分隔单词列表,那么您可以执行以下操作,谢谢

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

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

您需要读取整个文件,因为这是解析单词并确定其是否有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开头的单词添加到单词中。

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


在你阅读一个单词之前,你无法知道它是否以M开头,所以是的,你需要阅读整个文件。(如果它被分成几行,你可以一行一行地读,把不需要的东西从每一行中扔掉,这样你就不需要太多的内存了。)
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)