无法从已关闭的python文件列表中打开文件?

时间:2015-11-27 05:00:17

标签: python file typeerror

我有一个python列表list_of_docs,其中包含已关闭的.txt文件列表。我的目标是计算包含某个单词的文件数量。

def contains(word):
  count = 0
  for file in range list_of_docs:
    current_doc = open(list_of_docs[file], 'r')
    text = current_doc.read()
    line = text.split()
    if word in line:
      count += 1

当我调用此函数时,我不断收到错误:

TypeError: coercing to Unicode: need string or buffer, file found

list_of_docs中的文件实际上是在代码中提前打开的。我关闭它们并在此方法调用期间重新打开它们,因为因为没有关闭它们我得到Too many files open错误。

我如何解决此问题TypeError

1 个答案:

答案 0 :(得分:1)

file不是索引,它已经是列表中的项目。

所以你会:(已关闭的文件具有.name属性)

for file in range list_of_docs:
    current_doc = open(file.name, 'r')
    ...

我认为您应该重构代码以使用文件名列表

  for filename in range list_of_filenames:
    current_doc = open(filename, 'r')
      ...
      # still need to close the file

要确保文件已关闭,请使用上下文管理器

for filename in range list_of_filenames:    
    with open(filename, 'r') as current_doc:
        text = current_doc.read()
        line = text.split()
        if word in line:
          count += 1