我有一个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
?
答案 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