2010-12-06 3 views
2

я получаю это «запись в закрытую ошибку файла» при попытке скомпилировать следующий код:питон записи в файл

fout = open('markov_output.txt', 'w') 

for i in range(MAXGEN) : 
      # get our hands on the list 
    key = (w1,w2) 
    sufList = table[key] 
      # choose a suffix from the list 
    suf = random.choice(sufList) 

    if suf == NONWORD :  # caught our "end story" marker. Get out 
      if len(line) > 0 : 
        fout.write(line) 
      break 
    if len(line) + len(suf) > MAX_LINE_LEN : 
      fout.write(line) 
      line = "" 
    line = line + " " + suf 

    w1, w2 = w2, suf 
    fout.close() 
+1

Почему вы закрываете файл ** внутри ** цикла? Это, вероятно, будет писать только одну запись, а затем файл будет закрыт. Это то, что вы намеревались? Или ваш отпечаток неправильный? – 2010-12-06 18:23:39

ответ

3

Разве вы не хотите, чтобы fout.close() вне цикла ??

Вы могли бы рассмотреть возможность использования with если у вас есть Python 2.5 или более поздней версии:

with open('markov_output.txt', 'w') as fout: 
    # Your code to write to the file here 

Это автоматически закроет файл, когда вы закончите, а также, если какие-либо исключения происходят.

+1

Обратите внимание, что в Python 2.5 вам нужно использовать `from __future__ import with_statement`. – 2010-12-06 18:30:37

+0

@Brent: Да, это правильно. Спасибо, что заметили это. – 2010-12-06 18:31:10

6

Вы закрываете fout каждый раз через петлю. Un-indent fout.close() и он должен работать как ожидалось.

1

fout.close(), похоже, находится внутри цикла for.

Un-indent, что линия, для предполагаемого поведения.

1

Ваш fout.close() встречается внутри цикла for. Он будет закрыт после первого элемента, а не в конце операции.

Для ясности/надежности рекомендуется использовать оператор with при работе с файлами.