2015-11-27 2 views
0

У меня есть список python list_of_docs, который содержит список закрытых TXT-файлов. Моя цель - подсчитать, сколько файлов содержит определенное слово.Не удается открыть файлы из списка закрытых файлов python?

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

'open()' ожидает имя файла (не обработчик закрыт файл), поэтому 'list_of_docs' должен быть списком имен файлов. – furas

ответ

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 
+1

Файлы должны быть закрыты при чтении – Bassem

Смежные вопросы