我有一个加载了单词的文件,假设我只想读取以“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())
尽管您必须读取整个文件,但您避免将其全部保存在内存中,因此您可以获得内存效率。
在这枚硬币的另一面,如果您计划在同一个文件上多次使用,您可以存储在字典中以在恒定时间内进行查找(尽管内存效率为 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)
您需要阅读整个文件,因为这是解析单词并确定它是否有 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。