Подтвердить что ты не робот

TypeError: ожидается объект символьного буфера - при попытке сохранить целое число в текстовый файл

Я пытаюсь сделать очень простой "счетчик", который должен отслеживать, сколько раз моя программа была выполнена.

Во-первых, у меня есть текстовый файл, который включает только один символ: 0

Затем я открываю файл, анализирую его как int, добавляю 1 к значению, а затем пытаюсь вернуть его в текстовый файл:

f = open('testfile.txt', 'r+')
x = f.read()
y = int(x) + 1
print(y)
f.write(y)
f.close()

Я бы хотел, чтобы y перезаписывал значение в текстовом файле, а затем закрывал его.

Но все, что я получаю, это TypeError: expected a character buffer object.

Edit:

Попытка разобрать y как строку:

f.write(str(y))

дает

IOError: [Errno 0] Error
4b9b3361

Ответ 1

Вы проверили docstring write()? В нем говорится:

write (str) → None. Напишите строку str в файл.

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

Итак, сначала вам нужно преобразовать y в str.

Также обратите внимание, что строка будет записана в текущей позиции, которая будет в конце файла, потому что вы уже прочитали старое значение. Используйте f.seek(0), чтобы перейти к началу файла.

Изменить: что касается IOError, эта проблема, похоже, связана. Цитата оттуда:

Для режимов, в которых разрешены чтение и запись (или добавление) (те, которые содержат знак "+" ), поток следует очистить (fflush) или переместить (fseek, fsetpos, rewind) между чтением после чего следует операция записи или операция записи после чего выполняется операция чтения.

Итак, я предлагаю вам попробовать f.seek(0) и, возможно, проблема исчезнет.

Ответ 2

from __future__ import with_statement
with open('file.txt','r+') as f:
    counter = str(int(f.read().strip())+1)
    f.seek(0)
    f.write(counter)

Ответ 3

Просто попробуйте код ниже:

Как я вижу, вы вставили "r +" или эта команда открыла файл в режиме чтения, чтобы вы не могли его записать, поэтому вам нужно открыть файл в режиме записи "w", если вы хотите перезаписать содержимое файла и запись новых данных, в противном случае вы можете добавить данные в файл с помощью 'a'

Я надеюсь, что это поможет;)

f = open('testfile.txt', 'w')# just put 'w' if you want to write to the file 

x = f.readlines() #this command will read file lines

y = int(x)+1

print y
z = str(y) #making data as string to avoid buffer error
f.write(z)

f.close()