Python 仅从文件中读取某些内容
我有一个加载了单词的文件,比如说,为了节省内存,我只想读取以“M”(例如)开头的单词,我可以这样做吗?还是需要读取完整的文件并在之后进行过滤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_
如果您的文件是一个新行分隔单词列表,那么您可以执行以下操作,谢谢
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)