TypeError:期望一个字符缓冲区对象 - 同时尝试将整数保存到textfile

BSG*_*BSG 55 python parsing file

我正在尝试制作一个非常简单的"计数器",它应该跟踪我的程序执行次数.

首先,我有一个只包含一个字符的文本文件: 0

然后我打开文件,将其解析为int,添加1到值,然后尝试将其返回到文本文件:

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

我想y覆盖文本文件中的值,然后关闭它.

但我得到的只是TypeError: expected a character buffer object.

编辑:

试图解析y为字符串:

f.write(str(y))
Run Code Online (Sandbox Code Playgroud)

IOError: [Errno 0] Error
Run Code Online (Sandbox Code Playgroud)

Lev*_*sky 77

你检查过文档字符串了write()吗?它说:

写(str) - >无.将字符串str写入文件.

请注意,由于缓冲,在磁盘上的文件反映写入的数据之前可能需要flush()或close().

所以你需要转换ystr第一个.

另请注意,字符串将写在当前位置,该位置将位于文件末尾,因为您已经读取了旧值.使用f.seek(0)去的file.`的开始

编辑:至于IOError,这个问题似乎有关.从那里引用:

对于允许读取和写入(或附加)的模式(包括"+"符号的模式),应在读取操作之后刷新(fflush)或重新定位(fseek,fsetpos,rewind)流.写入操作或写入操作,然后进行读取操作.

所以,我建议你试试f.seek(0),也许问题就会消失.


Bur*_*lid 9

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)
Run Code Online (Sandbox Code Playgroud)