处理内存中Python文件的最佳方法

时间:2017-11-30 15:24:34

标签: python time-complexity

假设我有一个未定义文本文件名的目录。所以我想检查每个单词中有多少单词。由于这些文件可以有很大的尺寸,我想知道用Python最有效的方法是什么。这种经典的方法看起来并不理想:

for file in files:
    with open(file) as f:
        content = f.readlines()
        for word in words:
            if word in content:
                count+=1

我的问题是:

  1. 我应该如何处理内存中的大文件?
  2. 这是O(n * m)的复杂性,其中n = #file和m =#words,是否可以减少这个?或者是否有任何数据结构可以帮助我?

1 个答案:

答案 0 :(得分:3)

第一步是不使用readlines() - 它会将整个文件的内容一次性转储到内存中,因此除了内存复杂性之外的时间复杂性是直接的O(n *米)。你可以通过使用readline()代替它,逐行读取它直到EOF来减少它。

时间方面,你正在寻找某种类型的词典 - 可能是collection.Counter。它允许O(1)查找已遇到的单词。