Считать слова в.txt, а затем записывать результаты в том же.txt

Я пытаюсь посчитать количество слов в текстовом документе, а затем записать сумму обратно в.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) не правильный способ записать сумму в TXT?

4 ответа

Решение

Вы должны конвертировать 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чтобы убедиться, что файл будет закрыт

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

f.write(str(words))

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)

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

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

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

f.write("number of words ")
f.write(str(words))
Другие вопросы по тегам