2012-06-07 4 views
1

Привет всем, это код, который я пытаюсь запустить. Я не компьютерный ученый, и я знаю, что это простой ответ. У меня просто нет инструментов для ответа. Я пытаюсь, чтобы этот список был напечатан в текстовом файле. Он работает, если я печатаю на экране. Ошибки я получаю это: «TypeError: ожидается символ буфера объекта»python output data type confusion

здесь код

input = open('Tyger.txt', 'r') 
text = input.read() 
wordlist = text.split() 

output_file = open ('FrequencyList.txt','w') 
wordfreq = [wordlist.count(p) for p in wordlist] 

#Pair words with corresponding frequency 

dictionary = dict(zip(wordlist,wordfreq)) 

#Sort by inverse Frequency and print 

aux = [(dictionary[key], key) for key in dictionary] 
aux.sort() 
aux.reverse() 

for a in aux: output_file.write(a) 

Спасибо!

+0

Это не решит вашу проблему, но вы должны рассмотреть возможность использования ['' with' statement] (http://docs.python.org/reference/compound_stmts.html#the-with-statement) для открытия файлов. Вы также можете посмотреть в ['collections.Counter'] (http://docs.python.org/library/collections.html#collections.Counter), где подсчитываете вещи и в своем понимании списков словарных статей,' [ (значение, ключ) для ключа, значение в словаре.items()] '- используя [' dict.items() '] (http://docs.python.org/library/stdtypes.html#dict.items) означает вам не нужно постоянно искать словарные словари, которые лучше читать. –

+1

Я бы начал с изменения 'output_file.write (a)' to 'output_file.write (str (a))'. Когда вы печатаете его на экране, перед печатью он делает неявное преобразование строк. Запись в файл не делает этого. –

+0

Что такое 'type (a)' он должен быть строкой. Вы можете передать его в строку с помощью 'str (a)' – dm03514

ответ

4

Как я сказал в комментариях выше, измените output_file.write(a) на output_file.write(str(a)). Когда вы делаете print, Python пытается выполнить неявное преобразование строк во все, что вы печатаете. Вот почему работает print с кортежем (как вы здесь делаете). file.write() не подразумевает конвертации, поэтому вам нужно скрывать его самостоятельно str().

Как отмечено в комментариях к этому ответу, вам, вероятно, необходимо позвонить .close() по файлу.

+0

sr2222 это исправило ошибку, и программа прошла, но ничего не выводит в выходной файл. Я делаю что-то еще неправильно –

+1

Возможно, вам стоит закрыть() файл? Как ... output_file.close() – peixe

+0

Также можно просто установить 'sys.stdout = open ('FrequencyList.txt', 'wt')' и использовать инструкции 'print'. Если вы это сделаете, вам также нужно будет сохранить и восстановить исходное значение 'sys.stdout'. – martineau

0

вы можете написать код, как:

input = open('tyger.txt','r').read().split() 
...... 
......... 
............ 
for a in aux: 
    output_file.write(str(a)) 
    output_file.close() 

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