2013-06-07 2 views
1

у меня есть следующая функцияпечать выходной питона в файл не работает

outFile = open("svm_light/{0}/predictions-average.txt".format(hashtag), "a") 
with open('svm_light/{0}/predictions-{1}'.format(hashtag,segMent)) as f: 
    tot_sum = 0 
    for i,x in enumerate(f, 1): 
     val = float(x) 
     tot_sum += val    
     average = tot_sum/i 
     outFile.write(average) 

Я просто пытаюсь напечатать выход для каждого среднем 1 среднем в каждой строке. однако им получает следующее сообщение об ошибке ...

outFile.write(average)    
TypeError: expected a character buffer object 

, если я просто изменить свою программу к этому:

with open('svm_light/{0}/predictions-{1}'.format(hashtag,segMent)) as f: 
    tot_sum = 0 
    for i,x in enumerate(f, 1): 
     val = float(x) 
     tot_sum += val    
     average = tot_sum/i 
     print average 

печатает следующее:

@ubuntu:~/Documents/tweets/svm_light$ python2.7 tweetAverage2.py 

    0.428908289104 
    0.326446277105 
    0.63672940322 
    0.600035561829 
    0.666699795857 

печатает вывод аккуратно на экране, но я хотел бы сохранить его в среднем по одной строке, как показано на фактическом выходе.
Im новый для python, и я использую 2.7 под ubuntu.

UPDATE

Thanx к быстрой реакции, ввел функцию ул. Тем не менее, он печатает пустой файл, я вижу, что файл имеет содержимое для бит, а затем его нет. скорее всего, его переписывают все время. Таким образом, я помещаю эту функцию печати, которой это не должно быть, но где?

+1

'outFile.write (ул (средняя) + "\ п")' –

ответ

3

Вы должны преобразовать average в строку перед записью ее в файл, вы можете использовать str() или форматирование строки для этого.

outFile.write(str(average)) 

Помощь по file.write:

>>> print file.write.__doc__ 
write(str) -> None. Write string str to file. #expects a string 

Note that due to buffering, flush() or close() may be needed before 
the file on disk reflects the data written. 

Update:

outFile_name = "svm_light/{0}/predictions-average.txt".format(hashtag) 
in_file_name = 'svm_light/{0}/predictions-{1}'.format(hashtag,segMent) 
with open(in_file_name) as f, open(outFile_name, 'w') as outFile: 
    tot_sum = 0 
    for i,x in enumerate(f, 1): 
     val = float(x) 
     tot_sum += val    
     average = tot_sum/i 
     outFile.write(average + '\n') # '\n' adds a new-line 
+0

спасибо! см. мое редактирование, последующий вопрос –

+0

@ RHK-S8 откройте 'outFile' в режиме добавления (' 'a''), если вы пишете тот же файл в цикле. –

+0

Я сделал это (см. Обновление), но он по-прежнему создает пустой файл –

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