считать слова в .txt, а затем записывать результаты в том же .txt - PullRequest
0 голосов
/ 28 июня 2018

Я пытаюсь подсчитать количество слов в текстовом документе, а затем записать сумму обратно в .txt

вот как далеко у меня

words = 0
   f = open("count.txt", 'r+')

for wordcount in f.readline().split(" "):
   words += 1


print('number of words ')
print(words)


f.write("number of words ")
f.write(words)
f.close()

Я получаю эту ошибку

TypeError: expected a character buffer object

Где я иду не так?

я чувствую, что f.write(words) не правильный способ записать сумму в текст?

Ответы [ 4 ]

0 голосов
/ 28 июня 2018

Слова должны быть преобразованы в строку. File.write() - это то, что на самом деле собирается написать.

Ваш новый код:

f.write("number of words ")
f.write(str(words))
0 голосов
/ 28 июня 2018

Вы должны преобразовать words в строку, прежде чем сможете записать ее в файл.

with open("count.txt", "r+") as f:
    words = len(f.read().split())
    print('number of words ')
    print(words)

    f.write("number of words ")
    f.write(str(words))

Кроме того:

readline читает только одну строку. Используйте read, чтобы прочитать весь файл.

используйте len, чтобы подсчитать размер списка, внутри самого подсчета

используйте with, чтобы убедиться, что файл будет закрыт

0 голосов
/ 28 июня 2018

f.write требует строку в качестве аргумента, в отличие от print, которая будет принимать любое количество объектов любого вида и автоматически преобразовывать их все в строки для вас и соедините их с настраиваемыми разделителями и настраиваемым окончанием и т. д.

Другими словами, print умный и дружелюбный; write - функция низкого уровня. Таким образом, чтобы сделать эту работу с write, вам нужно выполнить преобразование вручную.

f.write(str(words))

Но вы также можете просто использовать print вместо вызова f.write:

print(words, file=f)

Обратите внимание, что это не совсем то же самое. Когда вы звоните print, по умолчанию он ставит новую строку в конце. Итак, этот код:

print('number of words ')
print(words)

… выведет две отдельные строки:

number of words
3

И также этот код:

print('number of words ', file=f)
print(words, file=f)

… добавит в файл те же две отдельные строки.

0 голосов
/ 28 июня 2018

file.write принимает только текстовый буфер, поэтому вам нужно сначала преобразовать words в строку перед записью в файл:

f.write(str(words))
...