只读取文件中的某些内容

时间:2013-09-28 19:07:52

标签: python file-io

我有一个文件加载了文字,让我们说,我只想阅读以'M'开头的文件(例如)以节省内存,我可以这样做,还是需要阅读完整的文件和过滤后?

由于

3 个答案:

答案 0 :(得分: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())

虽然你必须读取整个文件,但你要避免将它全部保存在内存中,这样你才能获得内存效率。

答案 1 :(得分: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。

答案 2 :(得分: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)